Выделение выбранного элемента в раскрывающемся списке

У меня есть макет, в котором у меня есть расширяемый список во фрагменте слева и фрагмент деталей справа. Это все работает нормально.

Теперь я хотел бы указать, какой элемент слева имеет детали, показанные справа, и здесь у меня возникла проблема.

В обычном представлении списка я добился этого, установив режим выбора для представления списка в один, а затем используя состояние, отображаемое на основе «активированного» состояния. Когда я нажимаю на элемент, для фона устанавливается выбранный мной цвет, и он остается таким до тех пор, пока я не выберу другой элемент в списке.

Я попытался применить это к моему расширяемому списку, и это был/есть удручающий провал. Ошибок не было, но выбранный элемент не сохранил свое цветовое состояние. Я не уверен, правильно ли я устанавливаю для него режим выбора (Я пробовал это в файле макета, а также программно, похоже, это не имеет значения )или указывает не туда (не знаю, как это могло быть, но...)

Приветствуются любые подсказки/помощь (, даже если они совсем в другом направлении ).

Самая последняя ошибка:

расширяемый код списка

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

элемент _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>
14
задан Barak 25 April 2012 в 15:18
поделиться