Sto creando un ExpandableListView
con dati da un database. Per questo, sto usando un CursorTreeAdapter
e lo popolo con un oggetto Cursor
che contiene i dati che ho recuperato dal database.EspandibileListView mostra un indicatore per gruppi senza figli
Ho pensato che, per impostazione predefinita Android avrebbe considerato i gruppi senza figlio "non espandibile".
Tuttavia mostra ancora l'icona di espansione sulla riga e quando faccio clic, non fa nulla. Non voglio che mostri questa icona.
Voglio solo che i gruppi che hanno childs mostrino l'icona di espansione, che non sta succedendo. Mostra l'icona di espansione per tutte le righe (quelle con figlio e senza figlio).
UPDATE
ho studiato il mio codice e ho visto che il problema è fondamentalmente nel fissare la groupIndicator
per i gruppi. Tuttavia Ho provato un sacco di approcci come la creazione di un selettore e l'impostazione E 'drawable in base allo stato ed espandibile, in questo modo:
<?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>
Ma quando il gruppo è compresso si nasconde per tutte le compresi quelli con i bambini (perché Gruppi compressi riconosciuti da Android come vuoti).
Qualunque approccio migliore per impostare l'indicatore solo per gruppi con bambini?
Ecco il mio codice.
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")));
}
}
}
Come posso restituire una vista in un metodo vuoto? heheh Forse dovrebbe essere nel metodo 'newGroupView()' corretto? A proposito, che cos'è ** viewHolder ** e che cos'è ** indicatore **? – rogcg
scusate. il ritorno era sbagliato, vero. nell'adattatore del cursore non è necessario restituire la vista: D. Informazioni su ViewHolder (uno schema per velocizzare le cose negli elenchi): http://www.youtube.com/watch?v=wDBM6wVEO70&feature=player_detailpage#t=511s –
Sopra il link che sta sviluppando per parlare di ViewHolder. Quindi lo spiega su http://www.youtube.com/watch?v = wDBM6wVEO70 & feature = player_detailpage # t = 511s –