Android ListView notifyDataSetChanged() 不刷新列表

Android ListView notifyDataSetChanged() dont refresh the list

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

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

不用担心 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);
    }
}

替换:

credentials.clear();

与 :

adapter.clear()

并且每当你想向列表中添加数据时使用:

adapter.addAll(credentials)

adapter.insert("new data")

它一定能解决您的问题。

最后一点:adapter.notifyDataSetChanged();它不是必需的,因为它在适配器方法的内部。祝你好运。