ExpandableListView zeigt Indikator für Gruppen ohne Kind

Ich erstelle eineExpandableListView mit Daten aus einer Datenbank. Dafür benutze ich aCursorTreeAdapter und ich bevölkere es mit aCursor Objekt, das die Daten enthält, die ich aus der Datenbank abrufe.

Ich dachte, dass Android standardmäßig die Gruppen ohne Kind berücksichtigen würde"nicht erweiterbar".

Es wird jedoch immer noch das Erweiterungssymbol in der Zeile angezeigt, und wenn ich darauf klicke, geschieht nichts. Ich möchte nicht, dass dieses Symbol angezeigt wird.

Ich möchte, dass nur die Gruppen mit untergeordneten Elementen das Erweiterungssymbol anzeigen, was nicht geschieht. Es zeigt das Erweiterungssymbol für alle Zeilen (mit und ohne Kind).

AKTUALISIEREN

Ich habe meinen Code studiert und festgestellt, dass das Problem im Wesentlichen darin besteht, den Code festzulegengroupIndicator für die Gruppen. Ich habe jedoch viele Ansätze ausprobiert, wie z. B. das Erstellen eines Selektors und das Festlegen, dass er auf der Grundlage des Status gezeichnet und erweitert werden kann:

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

Wenn die Gruppe ausgeblendet ist, wird sie jedoch für alle Gruppen ausgeblendet, auch für Gruppen mit Kindern (da Android ausgeblendete Gruppen als leer erkannt hat).

Gibt es einen besseren Ansatz, um das Kennzeichen nur für Gruppen mit Kindern festzulegen?

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage