我有一个设置为ListView
的onItemClickListener
:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// not important
if (!found) {
activity.addSelectedIngredient(ingred);
parent.getChildAt(position).setBackgroundColor(Color.parseColor("#ff99FE80"));
} else {
activity.removeSelectedIngredient(ingred);
parent.getChildAt(position).setBackgroundColor(Color.WHITE);
}
}
如果父母没有让孩子处于选定位置(例如15),则会抛出
NullPointerException
。为什么?如果元素已经选择,该元素怎么可能不存在?编辑:
if (!found) {
activity.addSelectedIngredient(ingred);
view.setBackgroundColor(Color.parseColor("#ff99FE80"));
} else {
activity.removeSelectedIngredient(ingred);
view.setBackgroundColor(Color.WHITE);
}
最佳答案
getChildAt返回listView的子级。 getChildAt position与适配器中的位置不同。适配器中可以有1000个项目,而列表视图中只能有几个childView,因为视图正在重用。
我认为你应该改变
parent.getChildAt(position).setBackgroundColor(Color.WHITE);
至
view.setBackgroundColor(Color.WHITE);