ExpandableListView montre indicateur de groupes sans enfant

Je suis de la création d'un ExpandableListView avec des données provenant d'une base de données. Pour cela, je suis en utilisant un CursorTreeAdapter et je le remplir avec un Cursor objet qui contient les données que j'ai récupérer à partir de la base de données.

J'ai pensé que, par défaut d'Android serait de considérer les groupes sans enfant "pas extensible".

Cependant, il montre encore l'icône sur la ligne, et quand je clique dessus, il ne fait rien. Je n'en veux pas à afficher cette icône.

Je ne veux que les groupes qui les a childs pour afficher l'icône de développement, ce qui n'est pas le cas. Il montre l'icône de développement pour toutes les lignes (celles avec enfants et sans enfants).


Mise à JOUR

J'ai étudié mon code et j'ai vu que le problème est essentiellement dans la définition de la groupIndicator pour les groupes. Cependant j'ai essayé beaucoup d'approches, comme la création d'un sélecteur, il est dessiné en fonction de l'état et extensible, comme ceci:

<?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>

Mais lorsque le groupe est effondré il se cache pour tous les groupes, y compris ceux avec des enfants (parce qu'Android a reconnu s'est effondré groupes vide).

À une meilleure approche pour la définition de l'indicateur uniquement pour les groupes avec des enfants?


Voici mon code.

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

OriginalL'auteur rogcg | 2012-07-03