Estoy creando un ExpandableListView
con datos de una base de datos. Para eso, estoy usando un CursorTreeAdapter
y lo lleno con un objeto Cursor
que contiene los datos que recupero de la base de datos.ExpandableListView muestra el indicador para grupos sin hijos
Pensé que, por defecto, Android consideraría los grupos sin hijos "no ampliable".
Sin embargo, sigue mostrando el ícono expandir en la fila, y cuando hago clic en él, no hace nada. No quiero que muestre este ícono.
Solo quiero que los grupos que tienen hijos muestren el ícono expandir, lo que no está sucediendo. Muestra el icono expandir para todas las filas (aquellas con hijo y sin hijo).
ACTUALIZACIÓN
he estudiado mi código y he visto que el problema es básicamente en el establecimiento de la groupIndicator
para los grupos. Sin embargo he intentado un montón de enfoques como la creación de un selector y se establece que está basada estirable en estado y ampliable, como esto:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_empty="true"
android:state_expanded="false"
android:drawable="@android:color/transparent"/>
<item android:drawable="@drawable/expander_ic_maximized" />
</selector>
Pero cuando se derrumbó el grupo que oculta para todos los grupos, incluyendo los que tienen hijos (porque Android reconoció grupos colapsados como vacíos).
¿Algún enfoque mejor para configurar el indicador solo para grupos con niños?
Aquí está mi código.
public class ContactsExpandableListAdapter extends CursorTreeAdapter
{
TextView mContactNameTextView, mContactNumberTextView;
Cursor mChildrenCursor = null;
public ContactsExpandableListAdapter(Cursor cursor, Context context)
{
super(cursor, context);
}
@Override
protected Cursor getChildrenCursor(Cursor cursor)
{
if(mContactId == -1)
mContactId = null;
return mController.getContactById(mContactId);
}
public int getChildrenCount(int groupPosition)
{
return mChildrenCursor.getCount();
}
@Override
protected View newGroupView(Context context, Cursor cursor, boolean paramBoolean, ViewGroup viewGroup)
{
View view = LayoutInflater.from(context).inflate(R.layout.filterbycontact, viewGroup, false);
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null) mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
else
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_name")));
view.setTag(cursor.getString(cursor.getColumnIndex("contact_id")));
return view;
}
@Override
protected View newChildView(Context context, Cursor cursor, boolean paramBoolean, ViewGroup viewGroup)
{
View view = LayoutInflater.from(context).inflate(R.layout.filterbycontact, viewGroup, false);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
else
{
mContactNumberTextView = (TextView) view.findViewById(R.id.contact_number);
mContactNumberTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
view.setTag(cursor.getString(cursor.getColumnIndex("contact_number")));
return view;
}
@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
else
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_name")));
view.setTag(cursor.getString(cursor.getColumnIndex("contact_id")));
}
@Override
protected void bindChildView(View view, Context context, Cursor cursor, boolean paramBoolean)
{
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
else
{
mContactNumberTextView = (TextView) view.findViewById(R.id.contact_number);
mContactNumberTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
}
}
¿Cómo voy a devolver una vista en un método nulo? heheh Tal vez debería estar en el método 'newGroupView()' ¿correcto? Por cierto, ¿qué es ** viewHolder ** y qué es ** indicator **? – rogcg
lo siento. el regreso fue incorrecto, cierto. en el adaptador de cursor no es necesario devolver la vista: D. Acerca de ViewHolder (un patrón para acelerar las cosas en las listas): http://www.youtube.com/watch?v=wDBM6wVEO70&feature=player_detailpage#t=511s –
Sobre el enlace que está construyendo para hablar sobre ViewHolder. Luego lo explica en http://www.youtube.com/watch?v = wDBM6wVEO70 & feature = player_detailpage # t = 511s –