我有一个设置为ListViewonItemClickListener

@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);

08-17 11:01