Desidero implementare una semplice navigazione a scorrimento utilizzando un ViewPager con frammenti che contengono e gestiscono un RecyclerView.Il funzionamento di ViewPager non funziona con RecyclerView
I frammenti vengono creati e possono essere commutati utilizzando setCurrentItem()
, ma non è possibile scorrere verso sinistra o destra per passare da una pagina all'altra. Il ViewPager sembra ignorare qualsiasi gesto di scorrimento.
mio layout di attività:
<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>
Io popolo della ViewPager utilizzando un FragmentPagerAdapter
nel mio onCreate()
in questo modo:
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);
}
});
Il layout frammento è un semplice FrameLayout
che avvolge un 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>
L'adattatore ter e il gestore di layout sono fissati in del onCreateView
frammento:
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 6, LinearLayoutManager.VERTICAL, false));
Modifica # 1
penso non ho chiesto la mia domanda abbastanza chiaro.
Ho un cercapersone funzionante con un TabLayout funzionante che è popolato da un 'FragmentPagerAdapter', il che significa che Frammenti sono stati creati correttamente e il layout della scheda visualizza una scheda cliccabile per ciascun elemento. Ogni frammento di questo ViewPager visualizza uno RecyclerView
con uno GridLayoutManager
.
Tuttavia, il ViewPager non sembra ricevere alcun movimento di sfioramento. È possibile modificare la posizione selezionata corrente tramite TabLayout
, ma non eseguendo il trascinamento, ad esempio, da sinistra a destra.
Sembra che lo RecyclerView
consumi tutti gli eventi di scorrimento indipendentemente dalla direzione del layout, impostata su vertical
.
Qualche idea?
https://androidbeasts.wordpress.com/2015/08/11/tabs-with-swipe-views/#more-79 – Aakash