1

У меня есть ViewPager внутри Activity, который показывает два Fragments.Стоп-прокрутка для CollapsingToolbarLayout при показе фрагмента

Деятельность имеет TabLayout и CollapsingToolbarLayout. CollapsingToolbarLayout вложен в AppBarLayout с помощью ImageView для создания эффекта параллакса. TabLayout находится за пределами AppBarLayout внутри LinearLayout с ViewPager. Затем есть FrameLayout, а также показать еще Fragment по ViewPager, когда пользователь нажимает кнопку, чтобы показать, что Fragment.

Проблема заключается в том, что при прокрутке RecyclerView внутри Fragment, который накладывается поверх ViewPagerActivity также прокручивается и делает эффект параллакса. По существу, он прокручивает как RecyclerView внутри Fragment, так и содержимое внутри ViewPager.

Есть ли способ остановить прокрутку для CollapsingToolbarLayout и только прокручивать содержимое в наложении Fragment, когда пользователь видит, что Fragment?

Это то, что мой XML иерархия выглядит следующим образом:

<android.support.design.widget.CoordinatorLayout> 

<android.support.design.widget.AppBarLayout> 

    <android.support.design.widget.CollapsingToolbarLayout 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <ImageView 
      app:layout_collapseMode="parallax"/> 

     <android.support.v7.widget.Toolbar /> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<LinearLayout 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" > 

    <android.support.design.widget.TabLayout /> 
    <!-- Two fragments inside ViewPager each containing a RecyclerView --> 
    <android.support.v4.view.ViewPager /> 

</LinearLayout> 

<!-- User Clicks a button and fragment is added to this framelayout --> 
<!-- This fragment overlays on top of the entire Activity layout --> 
<!-- This fragment also contains a recyclerview --> 
<FrameLayout/> 


</android.support.design.widget.CoordinatorLayout> 
+0

Если вы не хотите, чтобы ваша деятельность, чтобы прокручивание AppBar затем удалите layout_behavior атрибут для LinearLayout. Я предполагаю, что ваш фрагмент FrameLayout содержит этот layout_behavior? – McGuile

+0

Вы хотите, чтобы ваш FrameLayout отображался в полноэкранном режиме (охватывая панель инструментов) или под панелью инструментов? Если вы перемещаете FrameLayout за пределы CoordinatorLayout (охватывая панель инструментов), вы можете затем переопределить прослушиватель касания, чтобы предотвратить прокрутку CoordinatorLayout в фоновом режиме. – blackcj

+0

@McGuile, что имеет смысл, может быть, я могу программно удалить поведение прокрутки, когда Fragment накладывает активность – AndyRoid

ответ

9

CoordinatorLayout и AppBarLayout работают через onNestedScroll обратные вызовы от детей. Если у вас есть скроллинг ребенка, вы можете остановить его от осуществления своего родителя/с, отключив эту функцию обратного вызова:

recyclerView.setNestedScrollingEnabled(false); 
+0

Отправленный ранее: http://stackoverflow.com/questions/30779123/need-to-disable-expand-on-collapsingtoolbarlayout-for-certain-fragments/. Но это было в значительной степени проигнорировано. Хотите знать, действительно ли это решает вашу проблему. Если нет, вы можете найти свой ответ в этом вопросе. : 3 – tachyonflux

+0

Спасибо, я проверю это, но ваш ответ очень короткий. – AndyRoid

+0

Хорошая новость, это решило мою проблему !! – AndyRoid

-3

Попробуйте nestedscrollview вместо LinearLayout.

+2

Этот ответ определенно заслуживает голосования, вы не только не учитывали мои требования к конкретным приложениям, но и предлагали полностью другой подход, который я уже знаю и обычно является довольно базовым примером, например, большинство новых примеров библиотеки поддержки дизайна начинаются с 'NestedScrollView'. Что делать, если я не хочу, чтобы контейнер LinearLayout прокручивался с экрана? Ваш ответ также является 6 словами, неопределенными и неясными, это не помогает мне и никому другому не рассматривать этот вопрос. – AndyRoid

+0

Красиво сочлененный, сэр. –

 Смежные вопросы

  • Нет связанных вопросов^_^