我有一个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
该方法的内容为空。所以在此之后,没有任何值可以添加 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/