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