0

我有 78 个项目的列表视图,在我的活动文件中我描述了 onClick 功能实现

lv.setOnItemClickListener(new ListView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Log.d("Click from activity", "win");
            if(!checkedContacts.contains(clearContacts.get(arg2))){
                checkedContacts.add(clearContacts.get(arg2));
                arg1.setBackgroundColor(R.color.selectedItem);
            } else {
                checkedContacts.remove(clearContacts.get(arg2));
                arg1.setBackgroundColor(Color.WHITE);

            }

        }
    });

因此,当我单击项目时,它会改变颜色。但是如果我向下滚动我的 listView,其他元素每 10 次就会有新的颜色。checkedContacts 数组具有正确的值,但可视化错误

4

1 回答 1

0

问题是列表视图会回收屏幕外的视图,因此您不会保存行状态。当您将行移出屏幕时,它将被删除,当它再次出现时,它将再次重新填充到您的适配器中。

您可以解决这个问题,例如,使用您的 checkedContacts var 并使其可从您的适配器访问,因此,如果getView您的适配器功能中给出的位置,您可以检查该行是否已被检查,然后您可以更改背景颜色。如果用户旋转屏幕,您可以将此变量保存onSaveInstanceState在您的活动中,以便以后恢复它们。

希望能帮助到你 :)

于 2013-06-18T12:15:53.963 回答