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
<code>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; } } </code>
item_selector.xml
<code><?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> </code>