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


No hay buen ejemplo sobre RecyclerView y StaggeredGridLayoutManager en Documentos de Android

No pude encontrar ningún mejor ejemplo para usar RecyclerView con StaggeredGridLayoutManager . Ni siquiera en Android Docs .

Q1. Necesito algunos ejemplos que pueden dar la explicación apropiada sobre cómo utilizar RecyclerView con StaggeredGridLayoutManager .

  • ClassCastException ViewGroup $ LayoutParams no se puede convertir en ViewPager $ LayoutParams
  • ¿Es posible pasar argumentos a un fragmento después de haber sido agregado a una actividad?
  • Bitmap escalado que mantiene la proporción de aspecto
  • MediaPlayer.setDataSource provoca IOException para archivo válido
  • Problema de actualización de la aplicación para Android
  • ZXing Android Generar código de barras 1D
  • Q2. ¿Puede alguien decirme si es posible crear el siguiente diseño utilizando RecyclerView con StaggeredGridLayoutManager

    ejemplo

    Hasta ahora he encontrado este enlace que no es en absoluto útil.

    También encontré este enlace para cardslib pero es demasiado complejo en la implementación y tiene demasiadas dependencias que aumentarán mi tamaño de aplicación innecesariamente.

  • ¿Hay alguna manera de usar Webkit Inspector Remote Debugging en iPad?
  • Cambio de locale: ¿Forzar la actividad a recargar recursos?
  • ¿Cómo usar la conexión 3G en la aplicación Android en lugar de Wi-fi?
  • Cómo eliminar la caché de aplicaciones para todas las aplicaciones en Android M?
  • El recuento de sesión se multiplica cuando uso Google Analytics Android SDK v4
  • Problema al guardar las preferencias compartidas en Android
  • 3 Solutions collect form web for “No hay buen ejemplo sobre RecyclerView y StaggeredGridLayoutManager en Documentos de Android”

    Para los que todavía están aterrizando en esta pregunta.

    Podría modificar el código siguiente según sus necesidades:
    Primero agrega bibliotecas de dependencias para Android RecyclerView y CardView

     compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:cardview-v7:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' 

    Su actividad principal layout_main.xml será simplemente como

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="7dp" tools:context=".MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> </RelativeLayout> 

    Definir el diseño de una tarjeta en un archivo de diseño denominado book_list_item.xml

     <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="wrap_content" android:layout_height="wrap_content" card_view:cardUseCompatPadding="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical"> <TextView android:id="@+id/BookName" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:textColor="@android:color/black" android:textSize="16sp" /> <TextView android:id="@+id/AuthorName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_below="@+id/country_photo" android:background="#1976D2" android:gravity="center_horizontal" android:paddingBottom="8dp" android:paddingTop="8dp" android:text="@string/hello_world" android:textColor="#ffffff" android:textSize="13sp" /> </LinearLayout> </android.support.v7.widget.CardView> 

    Defina este diseño como una clase ItemObject.java

     public class ItemObject { private String _name; private String _author; public ItemObject(String name, String auth) { this._name = name; this._author = auth; } public String getName() { return _name; } public void setName(String name) { this._name = name; } public String getAuthor() { return _author; } public void setAuthor(String auth) { this._author = auth; } } 

    Defina un adaptador personalizado SampleRecyclerViewAdapter para rellenar las tarjetas

     public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders> { private List<ItemObject> itemList; private Context context; public SampleRecyclerViewAdapter(Context context, List<ItemObject> itemList) { this.itemList = itemList; this.context = context; } @Override public SampleViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { View layoutView = LayoutInflater.from(parent.getContext()).inflate( R.layout.book_list_item, null); SampleViewHolders rcv = new SampleViewHolders(layoutView); return rcv; } @Override public void onBindViewHolder(SampleViewHolders holder, int position) { holder.bookName.setText(itemList.get(position).getName()); holder.authorName.setText(itemList.get(position).getAuthor()); } @Override public int getItemCount() { return this.itemList.size(); } } 

    También necesitaríamos un observador para cada ItemObject . Defina una clase SampleViewHolders

     public class SampleViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView bookName; public TextView authorName; public SampleViewHolders(View itemView) { super(itemView); itemView.setOnClickListener(this); bookName = (TextView) itemView.findViewById(R.id.BookName); authorName = (TextView) itemView.findViewById(R.id.AuthorName); } @Override public void onClick(View view) { Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT) .show(); } } 

    Ahora en MainActivity , asigne una instancia de StaggeredGridLayoutManager a recycler_view para definir cómo aparecerán los componentes.
    También rellenar las tarjetas con la instancia de SampleRecyclerViewAdapter , como sigue

     public class MainActivity extends AppCompatActivity { private StaggeredGridLayoutManager _sGridLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); _sGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(_sGridLayoutManager); List<ItemObject> sList = getListItemData(); SampleRecyclerViewAdapter rcAdapter = new SampleRecyclerViewAdapter( MainActivity.this, sList); recyclerView.setAdapter(rcAdapter); } private List<ItemObject> getListItemData() { List<ItemObject> listViewItems = new ArrayList<ItemObject>(); listViewItems.add(new ItemObject("1984", "George Orwell")); listViewItems.add(new ItemObject("Pride and Prejudice", "Jane Austen")); listViewItems.add(new ItemObject("One Hundred Years of Solitude", "Gabriel Garcia Marquez")); listViewItems.add(new ItemObject("The Book Thief", "Markus Zusak")); listViewItems.add(new ItemObject("The Hunger Games", "Suzanne Collins")); listViewItems.add(new ItemObject("The Hitchhiker's Guide to the Galaxy", "Douglas Adams")); listViewItems.add(new ItemObject("The Theory Of Everything", "Dr Stephen Hawking")); return listViewItems; } } 

    Salida se verá algo como esto Salida de dos columnas

    Para su requisito, puede incorporar un ImageView en book_list_item.xml y rellenarlo en consecuencia en SampleViewHolders
    También tenga en cuenta, para cambiar el número de columnas de 2 a 3.

    Puede cambiar la declaración en MainActivity como

     _sGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(_sGridLayoutManager); 

    Que dará una salida como esta Salida de tres columnas

    Aquí hay otro sencillo tutorial

    Suponiendo que ya ha creado un adaptador e inicializado el RecyclerView, el código siguiente debe hacer lo que está buscando.

     StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(staggeredGridLayoutManager); 

    Para más referencia y documentación, consulte el siguiente enlace: https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html

    Nuestros amigos "Henry" tienen una explicación buena y simple aquí .

    Y creo que debajo del constructor es adecuado para la mayoría de los usos:

     StaggeredGridLayoutManager(num , LinearLayoutManager.VERTICAL) // where 'num' is your columns count // LinearLayoutManager.VERTICAL = 1 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.