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:

@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; } 

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; } 
  • Espera unitl El acabado smoothScrollToPosition () de ListView
  • ¿Cómo hacer una lista emergente como un hilandero sin el hilador en androide?
  • Añadir 2 listview en el cajón de navegación, sólo uno funciona
  • ListView de Android enclicklistener no funciona con la casilla de verificación
  • Vista de lista de Android con secciones
  • Imagen local a través de json local en android
  • Android abriendo el menú contextual después de hacer clic en el botón
  • Custom ListView y el menú contextual. ¿Cómo conseguirlo?
  • Cómo crear un estante como ver en Android?
  • Match_parent no funciona para ListView, si ListView está dentro de NestedScrollView
  • SearchView con múltiples fragmentos usando viewpager en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.