Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Biblioteca avanzada de RecyclerView – ejemplos de código

Https://github.com/h6ah4i/android-advancedrecyclerview

Esto parece ser una gran biblioteca en términos de qué funcionalidad ofrece. Sin embargo, carece de buena documentación. Tiene un "tutorial" sobre los elementos Swipeable , pero como otras personas no pude seguirlo.

¿Alguien tiene un ejemplo de trabajo o puede alguien hacer un simple caso de uso de pasar un elemento y mostrar un botón debajo de él utilizando esta biblioteca? Sería útil para muchas personas interesadas en esta funcionalidad.

  • Reciclar vista - java.lang.NullPointerException
  • Hace notificydatasetchanged llamada onCreateViewHolder al usar RecyclerView
  • GridLayoutManager - el ancho de la columna envuelve a su propio hijo mayor
  • Obtener el elemento visible en el centro de RecycleView al desplazarse
  • ¿Por qué ListView y RecyclerView son focusableInTouchMode?
  • ¿Qué es la contraparte de RecyclerView.Adapter de ListView.Adpater.isEnabled ()
  • Centro Horizontal última fila utilizando span Recycler GridLayoutManager
  • Cómo guardar la posición de desplazamiento de RecyclerView en Android?
  • 2 Solutions collect form web for “Biblioteca avanzada de RecyclerView – ejemplos de código”

    He encontrado la biblioteca para ser bien documentado y fácil de usar.

    He escogido el código de la muestra original que se necesitaba para implementar deslizar con el botón debajo que se puede encontrar aquí .

    Esperamos que los siguientes consejos hagan aún más fácil entender el patrón en el que se implementan las muestras.

    Visión de conjunto

    createAdapter método createAdapter en LauncherPageFragment proporciona una descripción general de la actividad que contiene la función

    Cada muestra sigue cualquiera de los dos patrones:

    Muestra básica
    En el caso de la muestra básica, el adaptador y el soporte de vista necesarios para la vista de reciclador se definen en la misma clase de actividad.

    Muestra Compleja
    En el caso de una muestra compleja, el adaptador y el soporte de la vista se crean por separado y la vista del reciclador se define en otro fragmento.
    En tales casos hay un fragmento adicional que se añade en actividad. Éstos están presentes en el paquete com.h6ah4i.android.example.advrecyclerview.common.fragment , que se utiliza para proporcionar los datos que deben mostrarse en la vista del reciclador.

    Para el desplazamiento con el botón que necesita para crear RecyclerViewTouchActionGuardManager (para suprimir el desplazamiento mientras se ejecuta la animación de deslizar-despedir) y RecyclerViewSwipeManager para crear un adaptador envuelto.

    Para adapater necesitará implment la interfaz de SwipeableItemAdapter y el sostenedor de la visión necesita ampliar AbstractSwipeableItemViewHolder vez de RecyclerView.ViewHolder.

    Nota: He cambiado la implementación de onSetSwipeBackground En la muestra original estableció un cierto fondo en el itemview.
    Esto no era necesario en caso de que la vista de abajo se va a mostrar. También estaba causando redibujos innecesarios.

    Puede encontrar una documentación mejor detallada en el sitio web principal: https://advancedrecyclerview.h6ah4i.com

    Y lo siguiente se copia desde la página deslizable de la documentación:


    Paso 1. Hacer que el adaptador admita IDs estables

    Este paso es muy importante. Si el adaptador no devuelve IDs estables y únicos, esto causará algunos comportamientos extraños (animaciones erróneas, NPE, etc.)

     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { MyAdapter() { setHasStableIds(true); } @Override public long getItemId(int position) { // requires static value, it means need to keep the same value // even if the item position has been changed. return mItems.get(position).getId(); } } 

    Paso 2. Modifique el archivo de disposición de las vistas de elementos

    Envuelva las vistas de contenido con otro FrameLayout tiene @+id/container .

     <!-- for itemView --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="56dp"> <!-- Content View(s) --> <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"/> </FrameLayout> 

    ⏬ ⏬ ⏬

     <!-- for itemView --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="56dp"> <!-- for getSwipeableContainerView() --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Content View(s) --> <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"/> </FrameLayout> </FrameLayout> 

    Paso 3. Modificar ViewHolder

    1. Cambiar la clase padre a AbstractSwipeableItemViewHolder .
    2. Implementar el método getSwipeableContainerView() .

    Nota: La clase AbstractSwipeableItemViewHolder es una clase de conveniencia que implementa métodos de caldera de `SwipeableItemViewHolder.

     class MyAdapter ... { static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; MyViewHolder(View v) { super(v); textView = (TextView) v.findViewById(android.R.id.text1); } } ... } 

    ⏬ ⏬ ⏬

     class MyAdapter ... { static class MyViewHolder extends AbstractSwipeableItemViewHolder { TextView textView; FrameLayout containerView; public MyViewHolder(View v) { super(v); textView = (TextView) v.findViewById(android.R.id.text1); containerView = (FrameLayout) v.findViewById(R.id.container); } @Override public View getSwipeableContainerView() { return containerView; } } } 

    Paso 4. Implementar la interfaz SwipeableItemAdapter

     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { ... } 

    ⏬ ⏬ ⏬

     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements SwipeableItemAdapter<MyAdapter.MyViewHolder> { @Override public int onGetSwipeReactionType(MyViewHolder holder, int position, int x, int y) { // Make swipeable to LEFT direction return Swipeable.REACTION_CAN_SWIPE_LEFT; } @Override public void onSetSwipeBackground(MyViewHolder holder, int position, int type) { // You can set background color/resource to holder.itemView. // The argument "type" can be one of the followings; // - Swipeable.DRAWABLE_SWIPE_NEUTRAL_BACKGROUND // - Swipeable.DRAWABLE_SWIPE_LEFT_BACKGROUND // (- Swipeable.DRAWABLE_SWIPE_UP_BACKGROUND) // (- Swipeable.DRAWABLE_SWIPE_RIGHT_BACKGROUND) // (- Swipeable.DRAWABLE_SWIPE_DOWN_BACKGROUND) if (type == Swipeable.DRAWABLE_SWIPE_LEFT_BACKGROUND) { holder.itemView.setBackgroundColor(Color.YELLOW); } else { holder.itemView.setBackgroundColor(Color.TRANSPARENT); } } @Override public SwipeResultAction onSwipeItem(MyViewHolder holder, int position, int result) { // Return sub class of the SwipeResultAction. // // Available base (abstract) classes are; // - SwipeResultActionDefault // - SwipeResultActionMoveToSwipedDirection // - SwipeResultActionRemoveItem // - SwipeResultActionDoNothing // The argument "result" can be one of the followings; // // - Swipeable.RESULT_CANCELED // - Swipeable.RESULT_SWIPED_LEFT // (- Swipeable.RESULT_SWIPED_UP) // (- Swipeable.RESULT_SWIPED_RIGHT) // (- Swipeable.RESULT_SWIPED_DOWN) if (result == Swipeable.RESULT_LEFT) { return new SwipeResultActionMoveToSwipedDirection() { // Optionally, you can override these three methods // - void onPerformAction() // - void onSlideAnimationEnd() // - void onCleanUp() }; } else { return new SwipeResultActionDoNothing(); } } } 

    Paso 5. Modificar el proceso de inicialización de RecyclerView

    Ponga algún proceso de inicialización adicional en su Activity / Fragment .

    1. Instantiate RecyclerViewSwipeManager .
    2. Cree un adaptador envuelto y RecyclerView en RecyclerView .
    3. Adjuntar RecyclerView a RecyclerViewSwipeManager .

     void onCreate() { ... RecyclerView recyclerView = findViewById(R.id.recyclerView); MyAdapter adapter = new MyAdapter(); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); } 

    ⏬ ⏬ ⏬

     void onCreate() { ... RecyclerView recyclerView = findViewById(R.id.recyclerView); RecyclerViewSwipeManager swipeManager = new RecyclerViewSwipeManager(); MyAdapter adapter = new MyAdapter(); RecyclerView.Adapter wrappedAdapter = swipeManager.createWrappedAdapter(adapter); recyclerView.setAdapter(wrappedAdapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // disable change animations ((SimpleItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); swipeManager.attachRecyclerView(recyclerView); } 

    Espero que mi respuesta me ayude.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.