[英]Android ListView notifyDataSetChanged() dont refresh the list
这不是一个重复的问题,我已经尝试了 StackOverflow 上出现的关于这个主题的所有内容,但没有任何效果。
问题是,当我尝试在添加新数据时更新列表视图时,在调用 notifyDataSetChanged() 时它不显示更新的数据,我必须退出并再次进入活动以查看列表视图中的更改。 没有任何效果,甚至清除列表并再次添加新数据。
不用担心 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(); 它没有必要,因为它在适配器方法的主体内。 祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.