Java Android ListView notifyDataSetChanged()不刷新列表

Java Android ListView notifyDataSetChanged()不刷新列表,java,android,listview,arraylist,notifydatasetchanged,Java,Android,Listview,Arraylist,Notifydatasetchanged,这不是一个重复的问题,我已经尝试了StackOverflow上出现的关于这个主题的所有内容,但没有任何效果 问题是,当我尝试在添加新数据时更新listview时,调用notifyDataSetChanged()时它不会显示更新的数据,我必须退出并再次输入活动才能查看listview中的更改。即使清除列表并再次添加新数据,也没有任何效果 不要担心http客户端,问题不在那里,它工作得很好。用“手工制作”的ArrayList替换它也会出现同样的问题。 循环也不是问题,同样的问题仍然存在于循环之外 p

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

问题是,当我尝试在添加新数据时更新listview时,调用notifyDataSetChanged()时它不会显示更新的数据,我必须退出并再次输入活动才能查看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);
    }
}
公共类CredentialManager扩展AppCompatActivity实现View.OnClickListener{
最终处理程序=新处理程序(Looper.getMainLooper());
列表视图凭证列表;
ArrayList凭证;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u credential\u manager);
credentialsList=findViewById(R.id.credentialsList);
credentials=HTTPClientCredentials.read(“findByUser”,String.valueOf(MainActivity.user.getIdUser());
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,凭证);
凭证列表。设置适配器(适配器);
adapter.notifyDataSetChanged();
handler.postDelayed(新的Runnable(){
公开募捐{
credentials.clear();
credentials=HTTPClientCredentials.read(“findByUser”,String.valueOf(MainActivity.user.getIdUser());
adapter.notifyDataSetChanged();
handler.postDelayed(这个,5000);
}
}, 5000);
}
}
更换:

credentials.clear();
与:

adapter.clear()
无论何时,只要您想向列表中添加数据,请使用:

adapter.addAll(credentials)

它必须解决你的问题


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

看看这个:成功了,谢谢!
adapter.insert("new data")