【发布时间】:2015-05-24 15:00:57
【问题描述】:
我想在一个简单的 listView 中更改单击时的项目背景颜色。这是我的代码:
boolean[] selectedItem = new boolean[listElement.length]
final ArrayList<String> list1 = new ArrayList<>();
Collections.addAll(list1, listElement);
final ListView mylist = (ListView) findViewById(R.id.listView);
final ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, list1);
mylist.setAdapter(adapter);
mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
int firstVisiblePosition = mylist.getFirstVisiblePosition();
int effectivePosition = pos - firstVisiblePosition;
if (!selectedItem[pos]) {
mylist.getChildAt(effectivePosition).setBackgroundColor(Color.parseColor("#66F44336"));
} else {
mylist.getChildAt(effectivePosition).setBackgroundColor(Color.parseColor("#EEEEEE"));
}
selectedItem[pos] = !selectedItem[pos];
}
});
当列表很短(不涉及滚动)时它可以工作,当它很长时它不会:单击项目的背景颜色确实会改变,但是当我开始滚动时,每个的背景颜色> item 开始变化,我在这些变化中找不到任何逻辑,它们变化和反转,我什至没有触摸它们,只是通过滚动,这很奇怪,因为颜色应该只在调用 onItemClick() 时改变,对吗?我错过了什么?
【问题讨论】: