Android Listview项目颜色更改

最后发布: 2013-03-20 13:58:31


问题

我有以下使用充气机的列表适配器,我尝试在此处添加颜色更改,但它更改了每个项目,而不仅仅是单击的项目。

private class ListAdapter extends ArrayAdapter<jsonData>{

    private List<jsonData> jList;

    public ListAdapter(Context context, int resource,List<jsonData> jList) {
        super(context, resource, jList);
        this.jList = jList;
    }
         public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;

                if (v == null) {
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.listviewact_layout, null);
                            v.setBackgroundResource(R.layout.list_selector);
                }

                jsonData jd = jList.get(position);

                if (jd != null) {             
                    TextView name = (TextView) v.findViewById(R.id.memberName);
                    TextView dateJoined = (TextView) v.findViewById(R.id.dateJoined);
                    if (name != null) {
                        name.setText("Member Name: " + jd.name);
                    }
                    if (dateJoined != null) {
                        dateJoined.setText("Joined: " + getNewDate(jd.joined));
                    }
                }

                return v;
            }

我也可以得到项目的位置,除了颜色以外,大多数都可以正常工作。 我也尝试为选择器添加资源文件,但得到的结果相同。

更新:这似乎有效。 但是,当我滚动项目时,我会出现一个小故障。

            public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {          

            if(selectedItemPosition != position){
                //Resets old item to original color
                parent.getChildAt(selectedItemPosition).setBackgroundColor(Color.BLACK);
                view.setBackgroundColor(Color.BLUE);                    
                selectedItemPosition = position;
            }               
        }
android
回答

使用android:listSelector而不是android:background将选择器xml文件添加到您的listview

         <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:listSelector="@drawable/list_selector">
        </ListView>

试试这个选择器XML

<?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="@color/android:blue" />
<item android:state_enabled="true"
 android:state_focused="true" android:drawable="@color/android:transparent" />
<item
 android:drawable="@color/android:black" />


回答

view.setbackground();

Changes the background of entire list .since your view points to that list not a field in that list.
try this

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/black" /> <!-- focused -->
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed-->
    <item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed -->
    <item android:drawable="@color/black" /> <!-- default -->
</selector>