studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android listview android-cursoradapter

android - programacion - cursoradapter con diferentes diseños de filas



manual de programacion android pdf (3)

Estoy tratando de crear un cursoradapter personalizado que utilizará dos diseños diferentes dependiendo de algunos datos en el cursor. Sigo leyendo sobre ''anular getViewTypeCount () y getItemViewType ()'' para que esto ocurra, pero parece que no puedo descubrir cómo 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); }

.

EDITAR: Ahora tengo esto funcionando, pero quiero elegir qué rowlayout usar dependiendo de algunos datos en el cursor y no puedo hacerlo funcionar ... ¿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 lo hice funcionar. Para los interesados, el código de trabajo está a continuación:

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


Eche un vistazo a este example , 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; }