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); 
  • Altura diferente para cada elemento en GridView
  • GridView con colSpan y rowSpan
  • Imagen de Android parpadeando en la imagen en recyclerview
  • Android GridView OnItemLongClick escuchador llamado después de OnItemClick
  • Eliminar el espacio de borde alrededor de GridView
  • Lazy descargar imágenes en gridView
  • GridView carga lento para los recursos de imagen grande
  • Cómo crear AsymmetricGridView con diferentes tamaños de imagen en fila
  • Realizar onClickListener en ImageView en GridView
  • Imágenes de Picasso Library y GridView
  • Adición dinámica de elementos de cuadrícula en vista de cuadrícula
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.