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

标签 java android listview android-arrayadapter

我有一个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/

相关文章:

android - 遍历 ListView 并获取 EditText-Field 值

android - ListView 项目详细信息屏幕 : New or Same Activity?

java - 在使用页面工厂和 selenium webdriver 实现页面对象建模时,这两种方法中哪一种是更好的方法?

android - 从 Android 应用程序调用电话号码

java - 升级后的Android Studio “Error:Build script error, unsupported Gradle DSL method found: > ' getProguard()'!”

c# - Windows Phone 更新 ListView

java - 我用什么来跟踪号码?

java - Netbeans 8.1是否可以指定以分解模式将ear部署到wildfly

java - 在 ImageView 上绘图

android - 持有一个Activity实现的接口(interface)会导致内存泄漏吗?