Cursoradapter con diferentes diseños de filas
Estoy tratando de crear un cursoradapter personalizado que utilizará dos diseños diferentes dependiendo de algunos datos en el cursor. Sigo leyendo acerca de 'override getViewTypeCount () y getItemViewType ()' para hacer que esto suceda, pero no puedo encontrar la forma de implementar esto ..
Este es mi código para los métodos bindView y new View:
- Android ==> ListView quedarse seleccionado?
- ¿Cómo manejar el evento click en Listview en android?
- Android adjuntar múltiples adaptadores a un adaptador
- OnItemClickListener y OnClickListener no funcionan para ListView
- Inflar diseño en ListItem basado en la variable específica ListItem
@Override public void bindView(View view, Context context, Cursor cursor) { TextView tView = (TextView) view.findViewById(R.id.TextView1); tView.setText("The text"); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return mInflater.inflate(R.layout.item1, parent, false); }
.
EDIT: Ahora tengo este trabajo, pero quiero elegir lo que rowlayout a utilizar en función de algunos datos en el cursor y no puedo conseguir que el trabajo .. alguien tiene algunas ideas?
@Override public int getItemViewType(int position) { return position % 2; } @Override public int getViewTypeCount() { return 2; } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); holder.txtAddress .setText("blabla"); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder holder = new ViewHolder(); View v = null; int type = cursor.getPosition() % 2; if(type == 0) { v = mInflater.inflate(R.layout.item, parent, false); } else { v = mInflater.inflate(R.layout.item2, parent, false); } holder.txtAddress = (TextView) v.findViewById(R.id.tvName); v.setTag(holder); return v; }
- Android: consigue el i-ésimo TextView dentro de un ListView
- ¿Cómo desactivo la barra de autocorrección en los teclados de Android?
- Cómo ampliar el elemento de la lista desde el centro de la pizca
- cómo agregar varias vistas de imagen en la fila de vista de lista con vista de desplazamiento horizontal
- Mejor utilizar el adaptador Cursor o el adaptador Array
- Android string-array de archivo xml a ListView
- ¿Cómo puedo obtener uri del elemento ListView que se rellena con Cursor Adapter
- Listview no actualizar en fragmento con las pestañas viewpager
Así que finalmente conseguí que funcionara. Para los interesados el código de trabajo está abajo:
private int getItemViewType(Cursor cursor) { String type = cursor.getString(cursor.getColumnIndex("type")); if (type.equals("1")) { return 0; } else { return 1; } } @Override public int getItemViewType(int position) { Cursor cursor = (Cursor) getItem(position); return getItemViewType(cursor); } @Override public int getViewTypeCount() { return 2; } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); holder.textView .setText(cursor.getString(cursor.getColumnIndex("body"))); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder holder = new ViewHolder(); View v = null; if (cursor.getString(cursor.getColumnIndex("type")).equals("1")) { v = mInflater.inflate(R.layout.message1, parent, false); holder.textView = (TextView) v .findViewById(R.id.textView1); } else { v = mInflater.inflate(R.layout.message2, parent, false); holder.textView = (TextView) v .findViewById(R.id.textView2); } v.setTag(holder); return v; } public static class ViewHolder { public TextView textView; }
Echa un vistazo a este ejemplo , puede adaptarlo fácilmente para resolver su problema. Es bastante sencillo.
Otra posible solución con respecto al acceso al cursor en el método getItemViewType es la siguiente:
@Override public int getChildType(int groupPosition, int childPosition) { Cursor c = getChild(groupPosition, childPosition); if(c.getString(c.getColumnIndex(Contract.MyColumn)).equals("value")) return 0; else return 1; }
- El diseño gráfico de FragmentTabHost no procesa
- ¿Cómo instalar Google Play Services en el dispositivo Genymotion 6.0?