How to change background color of selected items in ListView?

后端 未结 3 952
情深已故
情深已故 2020-12-04 02:26

i\'ve seen many simillar questions and every answer is very specific to the problem and no straight forward answer, or i found tutorials that show how to create a checkbox t

相关标签:
3条回答
  • 2020-12-04 03:10

    Well i finally solved it, hope this helps someone :

    What i did was created an ArrayList<Integer> that stores all the position of selected items, and toggle the background colors on clicks.

    In my Adapter i define:

    public ArrayList<Integer> selectedIds = new ArrayList<Integer>();
    

    With the following method :

        public void toggleSelected(Integer position)
    {
        if(selectedIds.contains(position))
        {
            selectedIds.remove(position);
    
    
        }
        else
        {
            selectedIds.add(position);
        }
    }
    

    which addes\removes items from the ArrayList

    In my getView method :

                if (selectedIds.contains(position)) {
                convertView.setSelected(true);
                convertView.setPressed(true);
                convertView.setBackgroundColor(Color.parseColor("#FF9912"));
            }
            else
            {
                convertView.setSelected(false);
                convertView.setPressed(false);
                convertView.setBackgroundColor(Color.parseColor("#000000"));
            }
    

    This checks if the position is storred in the ArrayList. if it does, paint it as selected. if not, the opposite.

    all is left is the OnItemClick listener, i added :

        ((YourAdapter)list.getAdapter()).toggleSelected(new Integer(position));
    

    When YourAdapter is the adapter of your ListView

    Hope this helps anyone, as it's a generic answer :)

    0 讨论(0)
  • 2020-12-04 03:23

    There is a plain XML solution. The syntax below is WRT API 15. I used the following list item template:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/item_selection">
        <ImageView />
        <.. />
    </LinearLayout>
    

    It points to the file item_selection.xml in res/drawable-hdpi (in Android Studio 0.8.14):

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@android:color/holo_blue_dark" android:state_selected="true" />
    </selector>
    
    0 讨论(0)
  • 2020-12-04 03:25

    You can also set following selector as background to list item layout:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@color/android:transparent" />
        <item android:drawable="@drawable/listitem_normal" />
    </selector>
    

    Source: ListView item background via custom selector

    0 讨论(0)
提交回复
热议问题