Vista de cuadrícula de Android Cambiar el número de columnas dependiendo de los datos
Quiero arreglar la vista de cuadrícula como debajo de la imagen.
- ¿Honeycomb SDK rompió la compatibilidad con versiones anteriores de GridView?
- Imágenes de Picasso Library y GridView
- LayoutManager para RecyclerView Grid con diferente ancho de celda
- Tire para actualizar en Android sin biblioteca popular
- CollapsingToolbarLayout problema con GridView
- ¿Cómo tomar una captura de pantalla de gridview incluyendo todos los elementos de la cuadrícula?
- Mantenga GridView al reanudar desde el modo de suspensión
- No se puede dibujar línea sobre elementos gridview correctamente a través de celdas textview en Android
- Agregar vista entre 2 filas Gridview
- Alinear la casilla de verificación dentro de un diseño relativo
- Cómo mostrar anuncios de banner de forma intermitente en gridview
- Android GridView que hace que los artículos encajen en cada tamaño de pantalla
- Registrando UP / CANCEL desde el cuadro de diálogo cuando el evento DOWN fue disparado desde el LongPress de una vista
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
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);