Android ExpandableListView : set background color of selected item on click

守給你的承諾、 提交于 2019-12-03 17:29:41

At first remove attribute:

 <ExpandableListView
                android:listSelector = "@drawable/selector_categorie_item" />

and also remove background selector from ExpandableListView.

Then in your child layout item put next attribute:

 <YourLayout
         android:background = "@drawable/your_selector" />

Maybe you need the selector like this:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="true" 
     android:state_pressed="true" android:drawable="@drawable/exp_list_item_bg_pressed" />
    <item android:state_enabled="true"
     android:state_focused="true" android:drawable="@drawable/exp_list_item_bg_focused" />
    <item android:state_enabled="true"
     android:state_selected="true" android:drawable="@drawable/exp_list_item_bg_focused" />
    <item
     android:drawable="@drawable/exp_list_item_bg_normal" />
</selector>

this worked for me:

expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) {
            int index = parent.getFlatListPosition(ExpandableListView
                    .getPackedPositionForGroup(groupPosition));
            parent.setItemChecked(index, true);

            return false;
        }
    });
    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            /*Toast.makeText(scanTemplateFragment.getActivity(),
                    expandableListTitle.get(groupPosition)
                            + " -> "
                            + expandableListDetail.get(
                            expandableListTitle.get(groupPosition)).get(
                            childPosition), Toast.LENGTH_SHORT).show();*/
            int index = parent.getFlatListPosition(ExpandableListView
                    .getPackedPositionForChild(groupPosition, childPosition));
            parent.setItemChecked(index, true);

            return false;
        }
    });

and set background from list_item.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical" android:layout_width="match_parent"
              android:layout_height="wrap_content">
    <TextView
            android:id="@+id/tvListItem"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
            android:paddingTop="10dp"
            android:background="@drawable/row_highlighter"
            android:paddingBottom="10dp" />
</LinearLayout>

row_highlighter.xml:

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@color/std_color_1_bright" android:state_activated="true"/>
        <item android:drawable="@android:color/transparent"/>
    </selector>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!