Extensión RecyclerView (1) Uso y análisis de principios de ViewPager2
ViewPager2 es en realidad una función en el RecyclerView interno, por lo que ViewPager2 debe establecer el valor de RecyclerView.Adapter y el diseño de ItemView del adaptador debe ser match_parent. Esto permitirá que funcione correctamente. ViewPager2 Fragment proporciona un nuevo adaptador, FragmentStateAdapter.
Ejemplo de FragmentStateAdapter
Inicialice el adaptador de Viewpager2 en la actividad
Lo anterior es el uso y la configuración de propiedades de ViewPager2.
Inicie el análisis desde el constructor ViewPager2:
En el método constructor ViewPager2, se llamará al método de inicialización para la inicialización. Este método crea una instancia de un RecyclerView encapsulado y establece el layoutManager, OnScrollListener, OnScrollListener, OnScrollListener, OnScrollListener, OnScrollListener, OnScrollListener, etc.
ScrollEventAdapter significa literalmente: adaptador de eventos deslizante. Como indica el nombre de la clase, su función es adaptar el evento deslizante de RecyclerView al evento OnPageChangeCallback de ViewPager2
ScrollEventAdapter actúa como una clase de instancia de RecyclerView.OnScrollListener. Clase de instancia de OnScrollListener. En los dos métodos onScrollStateChanged y onScrolled que escuchan el estado deslizante de RecyclerView, se llama a despachoStateChanged, despachoSelected y despachoScrolled de acuerdo con diferentes estados. Estos estados se configuran como la interfaz deslizante de página OnPageChangeCallback de ViewPager2.
PageTransformerAdapter es una clase de instancia de ViewPager2.OnPageChangeCallback, que adapta el evento OnPageChangeCallback.onPageScrolled al evento PageTransformer.transformPage().
Veamos dónde se llama a PageTransformerAdapter en ViewPager2:
La función de PageTransformerAdapter es ajustar el evento onPageChangeCallback.onPageScrolled al evento PageTransformer.transformPage() en ViewPager2. Evento PageTransformer.transformPage().
Para conocer los valores de los parámetros del método transformPage (@NonNull View page, float position), consulte la explicación de PageTransformer en este artículo. Si desea implementar transiciones animadas entre páginas ViewPager2, puede anular PageTransformer
FragmentStateAdapter es el adaptador para el evento RecyclerView.PageTransformer.TransformPage (onPageScrolled) de Google. El adaptador implementa la adaptación para cargar Fragment por nosotros. Si queremos usar ViewPager2 para cargar la página Fragment, podemos heredar FragmentStateAdapter como adaptador, simplemente reescribir su constructor, createFragment y getItemCount.
Esta es una versión simple de FragmentAdapter de ViewPager2. Esto muestra que FragmentStateAdapter puede ayudarnos a implementar los métodos abstractos onCreateViewHolder y onBindViewHolder del adaptador. En el método onCreateViewHolder, creamos un FrameLayout como clase principal del Fragmento de Vista cargado.
En el método onCreateViewHolder anulado, FragmentViewHolder.create creará un ItemView con FrameLayout como contenedor principal. Si hay un Fragmento cargado en la vista del proyecto. Si el Fragmento cargado no es consistente con el Fragmento actual, se borrarán la vista del proyecto y los tres datos de HashMap. 2. Establezca nuevos datos para ambos HashMap. 3. Si existen circunstancias especiales, establezca nuevos datos. 4.
Comience a cargar fragmentos cuando ItemView esté adjunto a RecyclerView
La cantidad exacta de ItemViews que se adjuntan a RecyclerView depende del tamaño de caché de ViewPager2.
El proceso de carga de un fragmento se realiza en el método placeFragmentInViewHolder verificando el estado del fragmento y la Vista respectivamente.
Después de analizar el código fuente de ViewPager2, el resumen es el siguiente:
La función de ScrollEventAdapter: es convertir el evento de diapositiva RecyclerView en OnPageChangeCallBack de ViewPager2.
La función de PageTransformerAdapter es convertir el evento de diapositiva de RecyclerView en el PageTransformer de ViewPager2.
La función de FragmentStateAdapter es proporcionar un adaptador básico para que ViewPager2 cargue fragmentos.