2

我正在研究一个ListView,我已经在选定的项目上使用了setBackgroundColorinside 。onItemLongClickListener我的问题是,当我这样做并滚动时,它ListView也在设置一些不可见子项的颜色。怎么可能解决。

4

3 回答 3

2

尝试将以下属性放入您的 xml:

`

<ListView       
        android:dividerHeight="1dp"
        android:scrollingCache="false" >

`

于 2012-09-18T11:49:01.583 回答
1

这是因为列表视图使用旧视图以避免在滚动时重新创建视图。

事实上,这对所有的 adapterView 类都是通用的。

为了处理这个,存储视图位置的状态(使用 arrayList 或任何你想要的集合)并在 getView 上,如果位置在列表中设置为这个背景,使用这个背景,否则使用默认背景。

有关 listview 的更多信息,请阅读 API,或者(我强烈推荐)观看视频“ listView 的世界”。

于 2012-09-18T10:35:43.587 回答
0

在您的适配器类中:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView == null) {
        convertView = inflater.inflate(...);
    }
    convertView.setBackgroundColor(defaultcolor);
    ...
}

然而,当该视图将被重绘时,这将覆盖您在 onlongclicklistener 中设置的背景。因此,您可能希望保留单击项目的位置列表,以便您可以在 getView 方法中设置它们。

于 2012-09-18T11:07:43.423 回答