Я хочу реализовать простую навигацию по навигации с помощью ViewPager с фрагментами, которые хранят и управляют RecyclerView.ViewPager swipe не работает с RecyclerView
Фрагменты создаются и могут переключаться с использованием setCurrentItem()
, но вы не можете прокручивать влево или вправо, чтобы переключаться между страницами. Кажется, что ViewPager игнорирует любые жесты.
Моя раскладка активность:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>
<android.support.v7.widget.Toolbar
... />
</FrameLayout>
Я заселить ViewPager используя FragmentPagerAdapter
в моем onCreate()
так:
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.addOnPageChangeListener(this);
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Dummy2Fragment();
case 1:
return new Dummy2Fragment();
default:
return null;
}
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
return "Dataset " + (position + 1);
}
});
Компоновка фрагмент представляет собой простой FrameLayout
, который оборачивает RecyclerView:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_material_light"/>
</FrameLayout>
Адаптация тер и менеджер компоновки устанавливаются в фрагменте onCreateView
:
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 6, LinearLayoutManager.VERTICAL, false));
Редактировать # 1
Я думаю, что я не задавал мой вопрос достаточно ясно.
У меня есть рабочий пейджер с рабочим TabLayout, который заполняется «FragmentPagerAdapter», что означает, что Фрагменты созданы правильно, а макет вкладки отображает интерактивную вкладку для каждого элемента. Каждый фрагмент в этом ViewPager отображает RecyclerView
с GridLayoutManager
.
Однако ViewPager, кажется, не воспринимает какой-либо жест жестокого движения. Вы можете изменить текущее выбранное положение с помощью TabLayout
, но не путем прокрутки, например, слева направо.
Похоже, что RecyclerView
потребляет все события салфетки независимо от направления макета, который установлен на vertical
.
Любые идеи?
https://androidbeasts.wordpress.com/2015/08/11/tabs-with-swipe-views/#more-79 – Aakash