簡體   English   中英

調用notifyDataSetChanged后,Android ListView不會更新

[英]Android ListView not updating after a call to notifyDataSetChanged

我有一個活動,我這樣開始:

public class MyProblemsActivity extends ListActivity 
{
    String[] PROBLEMS = new String[] {"One", "Two", "Three" };
    ArrayAdapter adapter;       

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        adapter = new ArrayAdapter<String>(this,R.layout.my_problems, PROBLEMS);

        setListAdapter(adapter);

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);

這完全沒問題。

我遇到的問題是在通過Asynch調用調用遠程服務器后,我這樣做:

    @Override
    protected void onPostExecute(String result) 
    {       
            PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };
            adapter.notifyDataSetChanged();
        }

但屏幕不會更新。 我在這里做錯了什么?如何使用新值更新屏幕?

謝謝!!

發生了什么事

PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };

PROBLEMS是獲取對new字符串數組對象的引用...因此舊引用保持不變(未更改)..

要糾正它,請使用以下內容:

PROBLEMS.clear();
List<String> newlist = new ArrayList<String>();
newlist.add(..);
..
PROBLEMS.addAll(newlist);
adapter.notifyDataSetChanged();

這樣,新字符串將僅添加到由PROBLEMS指出的現有數組引用中

注意:我已經提到通過引用字符串的arraylist而不是string []來使用它的clear(),addAll()功能,你可以根據你的用途修改它為String []。

我讀到您從異步回調更新了列表。 我的情況也一樣。 我去UI線程中運行它,突然它按預期工作! (如果你不這樣做,通常你會得到一個例外。在這里它不會刷新列表。)對於我的看法,其他答案只是解決方法。

所以,改變你的代碼如下:

@Override
protected void onPostExecute(String result) 
{                  

  runOnUiThread(new Runnable() {

    @Override
    public void run() {
            PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };
            adapter.notifyDataSetChanged();
    }
});
};

如果您想要一個更簡單的答案,您可以將代碼更改為如下所示:

@Override
protected void onPostExecute(String result) 
{       
    PROBLEMS = new String[] {"Hello", "Bye", "Hmmmmmm" };
    adapter.clear();
    adapter.addAll(PROBLEMS);
    adapter.notifyDataSetChanged();
}

這會更改ArrayAdapter的內容以在新的String []中包含字符串,然后通知ListView ArrayAdapter具有新內容。 這將導致ListView更新並顯示您的新字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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