0

I have a ListView with set 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);
    }
}

The NullPointerException is thrown when parent hasn't got child on selected position (e.g. 15). Why? How it's possible that the element might not be present if she already selected it?

Edit:

if (!found) {
    activity.addSelectedIngredient(ingred);
    view.setBackgroundColor(Color.parseColor("#ff99FE80"));
} else {
    activity.removeSelectedIngredient(ingred);
    view.setBackgroundColor(Color.WHITE);
}
4

2 回答 2

3

getChildAt 返回 listView 的孩子。getChildAt 位置与适配器中的位置不同。您的适配器中可以有 1000 个项目,而列表视图中只有几个子视图,因为视图正在重用。

我觉得你应该改变

parent.getChildAt(position).setBackgroundColor(Color.WHITE);

view.setBackgroundColor(Color.WHITE);
于 2013-01-24T20:49:02.893 回答
1

尝试,

if (!found) {
    activity.addSelectedIngredient(ingred);
    view.setBackgroundColor(Color.parseColor("#ff99FE80"));
} else {
    activity.removeSelectedIngredient(ingred);
    view.setBackgroundColor(Color.WHITE);
}

解释:所以发生的事情是父级具有该视图但索引被重置。因此,您显然不知道将哪个索引分配给您的元素,这取决于列表视图已兑现元素的现金。因此,您应该使用视图,而不是让孩子。这与您刚刚单击的项目完全相同。

于 2013-01-24T20:48:35.623 回答