Destaque para o item selecionado na lista expansível
Eu tenho um layout onde eu tenho uma lista expansível em um fragmento à esquerda e um fragmento de detalhes à direita. Isso tudo funciona bem.
Agora eu gostaria de indicar qual item à esquerda está tendo os detalhes mostrados à direita e aqui estou tendo um problema.
Em uma exibição de lista normal, consegui isso definindo o modo de opção para a exibição de lista como único e, em seguida, usando um estado que pode ser desenhado com base no estado "ativado". Quando clico no item, o fundo é definido para a cor selecionada e fica assim até que eu selecione outro item na lista.
Eu tentei aplicar isso ao meu listview expansível e foi / é um fracasso sombrio. Não houve erros, mas o item selecionado não manteve seu estado de cor. Eu não tenho certeza se eu não estou definindo o modo de escolha corretamente para ele (eu tentei no arquivo de layout, bem como programaticamente, não parece fazer a diferença), ou apontando para a coisa errada (não sei como isso poderia ser, mas ...)
Qualquer ajuda / ponteiros apreciados (mesmo se estiver em uma direção completamente diferente).
Maior falha atual:
código de listview expansível
private void fillData(String group, String child) {
ExpandableListView lv;
mGroupsCursor = mDbHelper.fetchGroup(group);
getActivity().startManagingCursor(mGroupsCursor);
mGroupsCursor.moveToFirst();
lv = (ExpandableListView) getActivity().findViewById(R.id.explist);
lv.setChoiceMode(ExpandableListView.CHOICE_MODE_SINGLE);
mAdapter = new MyExpandableListAdapter(mGroupsCursor, getActivity(),
R.layout.explistlayout,
R.layout.explistlayout,
new String[] { "_id" },
new int[] { android.R.id.text1 },
new String[] { child },
new int[] { android.R.id.text1 });
lv.setAdapter(mAdapter);
registerForContextMenu(lv);
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
{
mRowId = id;
EventDisplayFragment eventdisplay = new EventDisplayFragment();
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventdisplay).commit();
return true;
}
});
}
public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
public MyExpandableListAdapter(Cursor cursor, Context context,
int groupLayout, int childLayout, String[] groupFrom,
int[] groupTo, String[] childrenFrom, int[] childrenTo) {
super(context, cursor, groupLayout, groupFrom, groupTo,
childLayout, childrenFrom, childrenTo);
}
@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
Cursor childCursor = mDbHelper.fetchChildren(mGroup, groupCursor
.getString(groupCursor
.getColumnIndex(AttendanceDB.EVENT_ROWID)));
getActivity().startManagingCursor(childCursor);
childCursor.moveToFirst();
return childCursor;
}
}
item_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/green" />
<item
android:state_selected="true"
android:drawable="@color/blue" />
<item
android:state_focused="true"
android:drawable="@color/violet" />
<item
android:state_activated="true"
android:drawable="@color/blue" />
</selector>