簡體   English   中英

Android ListView notifyDataSetChanged() 不刷新列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM