Ningún buen ejemplo sobre RecyclerView y StaggeredGridLayoutManager en Android Docs

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

Q1. Necesito algunos ejemplos que puedan dar una explicación adecuada sobre cómo usar RecyclerView con StaggeredGridLayoutManager .

Q2. ¿Alguien puede decirme si es posible crear el siguiente diseño usando RecyclerView con StaggeredGridLayoutManager

ejemplo

Hasta ahora he encontrado este enlace que no es del todo útil.

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

Para aquellos que todavía están llegando a esta pregunta.

Puede modificar el siguiente código según sus necesidades:
Primero agregue bibliotecas de dependencia 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 diseño de actividad principal activity_main.xml simplemente será como

    

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

        

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 { private List itemList; private Context context; public SampleRecyclerViewAdapter(Context context, List 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 visor para cada ItemObject . Así que 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 rellene las tarjetas con la instancia de SampleRecyclerViewAdapter , de la siguiente manera

 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 sList = getListItemData(); SampleRecyclerViewAdapter rcAdapter = new SampleRecyclerViewAdapter( MainActivity.this, sList); recyclerView.setAdapter(rcAdapter); } private List getListItemData() { List listViewItems = new ArrayList(); 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; } } 

La salida se verá algo como esto Salida de dos columnas

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

Podría cambiar la statement en MainActivity como

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

Lo cual dará un resultado como este Salida de tres columnas

Aquí hay otro tutorial simple

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

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

Para obtener más referencias 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 de constructor es adecuado para la mayoría de los usos:

 StaggeredGridLayoutManager(num , LinearLayoutManager.VERTICAL) // where 'num' is your columns count // LinearLayoutManager.VERTICAL = 1