Android列表视图项颜色变化

时间:2013-03-20 13:58:31

标签: android

我有以下使用inflater的列表适配器,我尝试在这里添加颜色更改,但它会更改每个项目,而不仅仅是单击的项目。

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

2 个答案:

答案 0 :(得分:0)

使用android:listSelector而非android:background将选择器xml文件添加到ur 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" />

答案 1 :(得分:0)

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>