【问题标题】:Android ListView notifyDataSetChanged() dont refresh the listAndroid ListView notifyDataSetChanged() 不刷新列表
【发布时间】:2021-08-07 02:21:30
【问题描述】:

这不是一个重复的问题,我已经尝试了 StackOverflow 上出现的有关该主题的所有内容,但没有任何效果。

问题是,当我尝试在添加新数据时更新列表视图时,在调用 notifyDataSetChanged() 时它不显示更新的数据,我必须退出并再次进入 Activity 以查看列表视图中的更改。没有任何效果,即使清除列表并再次添加新数据。

不用担心http客户端,问题不存在,完美运行。用“手工制作”的 ArrayList 替换它会出现同样的问题。 循环也不是问题,同样的问题在循环外仍然存在。

public class CredentialManager extends AppCompatActivity implements View.OnClickListener {

    final Handler handler = new Handler(Looper.getMainLooper());
    ListView credentialsList;
    ArrayList<String> credentials;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_credential_manager);

        credentialsList = findViewById(R.id.credentialsList);

        credentials = HTTPClientCredentials.read("findByUser", String.valueOf(MainActivity.user.getIdUser()));

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, credentials);

        credentialsList.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        handler.postDelayed(new Runnable() {
            public void run() {

                credentials.clear();
                credentials = HTTPClientCredentials.read("findByUser", String.valueOf(MainActivity.user.getIdUser()));
                adapter.notifyDataSetChanged();

                handler.postDelayed(this, 5000);
            }
        }, 5000);
    }
}

【问题讨论】:

标签: java android listview arraylist notifydatasetchanged


【解决方案1】:

替换:

credentials.clear();

与:

adapter.clear()

当您想向列表中添加数据时,请使用:

adapter.addAll(credentials)

adapter.insert("new data")

它必须解决你的问题。

最后一点:adapter.notifyDataSetChanged();它没有必要,因为它在适配器方法的主体内。祝你好运。

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多