0

我有一个列表视图,当用户单击某个项目时会更改该项目的背景颜色,但是我还需要它做的是将视图中的第一个项目设置为具有背景颜色,因此如果用户它是“默认”项目不点击任何东西。

我对 listview 的 onclick 看起来像:

list1.setOnItemClickListener(new OnItemClickListener() {
                    View row = null;
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                        imageURL = (String) (list1.getItemAtPosition(position));
                        if (row != null) {
                            row.setBackgroundResource(0);
                        }
                        row = v;
                        v.setBackgroundResource(R.color.selected);

                    }
                });

我当前的列表适配器看起来像:

class MyListAdapter extends ArrayAdapter<String> {

        private ArrayList<String> items;

        public MyListAdapter(Context context, int textViewResourceId,
                ArrayList<String> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        @Override
        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.image_row_layout, null);
            }
            String o = items.get(position);
            if (o != null) {
                SmartImageView tt = (SmartImageView) v.findViewById(R.id.smallimage);
                if (tt != null) {
                    tt.setImageUrl(o);

                }
            }
            return v;
        }
    }
4

1 回答 1

2

不要在 onItemClick 中手动更改行的背景,因为当该特定行被回收时,它将显示另一行的背景,该行未被选为您更改的颜色。

而是为您的背景创建一个具有不同状态的选择器,并使用setItemChecked来指示检查了哪一行,如果背景应该是不同的颜色,则列表视图将进行管理

于 2013-11-11T16:29:59.287 回答