studio example dinamico columnas android android-scrollview

android - example - GridView con dos columnas, el primer elemento abarca ambas columnas



gridview dinamico android (1)

Al investigar su pregunta, aprendí algo nuevo: me GridLayoutManager con GridLayoutManager para RecyclerView y noté que puede establecer un SpanSizeLookup personalizado. Ahora, un "intervalo" es solo una columna si está desplazándose verticalmente y una fila si está desplazándose horizontalmente. Por lo tanto, SpanSizeLookup permite especificar, por ejemplo, el artículo 0 toma 2 columnas, el artículo 1 toma 1 columna, etc.

Resulta que si utiliza RecyclerView con un GridLayoutManager la solución es fácil:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Create a grid layout with two columns GridLayoutManager layoutManager = new GridLayoutManager(this, 2); // Create a custom SpanSizeLookup where the first item spans both columns layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return position == 0 ? 2 : 1; } }); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(new MyGridAdapter()); }

Creé un proyecto de prueba solo para probarlo y asegurarme de que hiciera lo que esperaba, y funcionó a la perfección.

Una nota sobre el adaptador: RecyclerView.Adapter no es compatible con ListAdapter . Necesita extender su adaptador desde RecyclerView.Adapter y hacer los cambios apropiados.

Aquí está el adaptador que creé para mi proyecto de prueba:

public static class MyViewHolder extends RecyclerView.ViewHolder { ImageView mImageView; TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.imageView); mTextView = (TextView) itemView.findViewById(R.id.textView); } } public static class MyGridAdapter extends RecyclerView.Adapter<MyViewHolder> { private int[] mDrawables; public MyGridAdapter() { this.mDrawables = new int[] { R.drawable.images_01, R.drawable.images_02, . . . }; } @Override public int getItemCount() { return mDrawables.length; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.layout_grid_item, parent, false); MyViewHolder holder = new MyViewHolder(view); // set up any onClickListener you need on the view here return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.mImageView.setImageResource(mDrawables[position]); holder.mTextView.setText("Image " + position); } }

Primero, crea una subclase RecyclerView.ViewHolder . El patrón del soporte de vista ahora es una parte integral de esta nueva forma de hacer vistas de adaptador. Su ViewHolder configurará todas las vistas secundarias para su vista.

Luego, en su subclase RecyclerView.Adapter , onCreateViewHolder() y onBindViewHolder() . En onCreateViewHolder() infla su vista y construye ViewHolder . En onBindViewHolder() , utiliza la position para obtener los datos del adaptador y configurar las vistas secundarias mediante ViewHolder . Por lo tanto, RecyclerView técnicamente recicla ViewHolder s que contienen View s.

Una vez que realices esos cambios en tu adaptador, deberías estar listo.

Tengo una vista de imagen y una vista de cuadrícula ..

Mi diseño de diseño aquí ..

Quiero combinar estas dos vistas en una sola vista de cuadrícula

mi pregunta:

¿Cómo configurar el primer elemento de gridview en ambas columnas?