gpt4 book ai didi

java - android ArrayAdapter.clear() 清除自定义方法变量

转载 作者:搜寻专家 更新时间:2023-11-01 09:35:51 25 4
gpt4 key购买 nike

我有一个 ListView使用自定义的`ArrayAdapter,有时我有时会更新值。一切正常,但在第一次更新时它变空了。

我的阵列适配器:

protected class ResultArrayAdapter extends ArrayAdapter<JsonObject> {
private ArrayList<JsonObject> values;
protected ResultArrayAdapter(ArrayList<JsonObject> values) {
super(context, R.layout.content_result_item, values);
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { ... }
public void updateValues(ArrayList<JsonObject> values) {
//here values.size() > 0 and everything OK
this.clear();
//here values.size() == 0, why??
for (JsonObject value : values) {
this.add(value);
}
this.notifyDataSetChanged();
}
}

当我更新我的值时,我调用 updateValues()并在调用 this.clear() 后,还有参数 ArrayList<JsonObject> values这个方法是空的。所以在此之后,没有任何值(value)可以添加 this.add(value) , 但仅在第一次 onUpdate() 之后.

同时重命名 ArrayList<JsonObject> values参数,或将其保存在另一个参数中,都无济于事。

最佳答案

似乎您正在使用构造函数设置的 ArrayList 的同一实例更新值。您可以通过不从外部设置初始值来超越这一点。此外,您实际上并不需要类中的 values 成员。

protected class ResultArrayAdapter extends ArrayAdapter<JsonObject> {
protected ResultArrayAdapter(List<JsonObject> values) {
super(context, R.layout.content_result_item, new ArrayList<JsonObject>());
updateValues(values);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { ... }
public void updateValues(List<JsonObject> values) {
this.clear();
this.addAll(values);
this.notifyDataSetChanged();
}
}

您还可以在 for 循环中使用 addAll() 而不是 add() 并提供 List 而不是 ArrayList 。如果愿意,您甚至可以选择 Collection

关于java - android ArrayAdapter.clear() 清除自定义方法变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43266245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com