Vista de cuadrícula de Android Cambiar el número de columnas dependiendo de los datos

Introduzca aquí la descripción de la imagen Quiero arreglar la vista de cuadrícula como debajo de la imagen.

Usted necesita spacify ViewType en el adaptador de reciclador.

DEMO AQUÍ

public class RVStatisticAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<Statistic> mList; public RVStatisticAdapter(List<Statistic> list) { this.mList = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { case CITY_TYPE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_one, parent, false); return new CityViewHolder(view); case EVENT_TYPE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_two, parent, false); return new EventViewHolder(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Statistic object = mList.get(position); if (object != null) { switch (object.getType()) { case CITY_TYPE: ((CityViewHolder) holder).mTitle.setText(object.getTitle()); ((CityViewHolder) holder).no.setText(object.getNo()); ((CityViewHolder) holder).playerone.setText(object.getPlayer_one()); break; case EVENT_TYPE: ((EventViewHolder) holder).mTitle.setText(object.getTitle()); ((EventViewHolder) holder).no.setText(object.getNo()); ((EventViewHolder) holder).playerone.setText(object.getName()); ((EventViewHolder) holder).playertwo.setText(object.getPlayer_two()); break; } } } @Override public int getItemCount() { if (mList == null) return 0; return mList.size(); } @Override public int getItemViewType(int position) { if (mList != null) { Statistic object = mList.get(position); if (object != null) { return object.getType(); } } return 0; } public static class CityViewHolder extends RecyclerView.ViewHolder { private TextView mTitle,no,playerone; public CityViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_title); no = (TextView) itemView.findViewById(R.id.tv_no); playerone = (TextView) itemView.findViewById(R.id.tv_player_one); } } public static class EventViewHolder extends RecyclerView.ViewHolder { private TextView mTitle,no,playerone,playertwo; public EventViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_title); no = (TextView) itemView.findViewById(R.id.tv_no); playerone = (TextView) itemView.findViewById(R.id.tv_player_one); playertwo = (TextView) itemView.findViewById(R.id.tv_player_two); } } } 

Usted necesita usar RecyclerView con GridLayoutManager para eso. A continuación, puede utilizar GridLayoutManager.setSpanSizeLookup para establecer dinámicamente el recuento de columnas.

 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch (adapter.getItemViewType(position)) { case VIEW_TYPE_1: return 1; case VIEW_TYPE_2: return 2; default: return -1; } } }); 

Puedes tomar RecyclerView en lugar de GridView y escribir así

  RecyclerView mRecyclerView=(RecyclerView)findViewById(R.id.card_recycler_view); GridLayoutManager glm = new GridLayoutManager(getActivity(), 4); glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if (position % 3 == 2) { return 4; } else { return 2; } } }); mRecyclerView.setLayoutManager(glm); 

Puede utilizar StaggeredGridLayoutManager

  private StaggeredGridLayoutManager gaggeredGridLayoutManager; gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1); recyclerView.setLayoutManager(gaggeredGridLayoutManager); 

Para más información siga este enlace StaggeredGridLayoutManager

Por ejemplo ver esta imagen Introduzca aquí la descripción de la imagen

Este Uno Funcionará. Prueba esto

 RecyclerView RecyclerView=RecyclerView)findViewById(R.id.card_recycler_view); GridLayoutManager glm = new GridLayoutManager(getActivity(), 4); glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(position%3) { case 0: return 4; break; case 1: return 2; break; case 2: return 2; break; } } }); mRecyclerView.setLayoutManager(glm); 
  • Obtener todas las fotos de la programación android de dispositivos Android
  • Android GridVIew Cambiar el número de columnas según la orientación
  • Faltan fuentes de ImageView la primera vez que arrastrar y soltar en mi GridView
  • GridView con zoom
  • Cambiar dinámicamente el número de columna en android gridview?
  • ¿Cuál es la contraparte addFooterView para GridView?
  • android Espere entre actualizaciones de GridView
  • Cambiar la visibilidad del elemento Gridview
  • Pinterest como Grid en Android
  • GridView con el último elemento centrado
  • Cómo rellenar un GridView con ImageViews dinámicamente / mediante programación utilizando un ImageAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.