2012-06-20 90 views
2

我知道你可以調用notifyDataSetChanged();在這種情況下你會怎麼做 - 這甚至有可能嗎?如何在Android中刷新ListView

 ListView listView = getListView(); 
     listView.setTextFilterEnabled(true); 
     setListAdapter(new ArrayAdapter<String>(Items.this, R.layout.list, items)); 

編輯:我已更改爲以下建議之一。這是我在做什麼:

protected void onPostExecute(Void v) { 

     adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items); 
     setListAdapter(adapter); 

     adapter.notifyDataSetChanged(); 

    } 

這裏我刷新一個AsyncTask方法。這是在ListLiew頂部的一個帶有Submit按鈕的對話框中調用的。對話框將新數據插入到數據庫中,我希望列表刷新到哪裏來反映這一點。我已經嘗試了上面的代碼,並且在對話框中的按鈕的onClick內部。在對話被解除之前。

+0

您是否使用新插入的元素更新了您的物品列表,然後嘗試通知適配器? – Amal

+0

是的,我打電話給HttpPost,運行腳本通過PHP將數據插入數據庫。然後回到Java中,我試圖在完成後刷新listview。 – KickingLettuce

回答

0

您需要通過自身初始化ArrayAdapter

ArrayAdapter<String> adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items); 
setListAdapter(adapter); 

...然後調用notifyDataSetChanged()上:

adapter.notifyDataSetChanged(); 

請注意,您只需要調用該方法,如果該數據實際改變;鑑於此,您可能需要將其作爲成員變量存儲在該類中,以便以後可以訪問它。

+0

我記得你的方法是我嘗試的方式。不過,我用更多的代碼更新了我的問題,但仍然無法正常工作。 – KickingLettuce

+0

首先:嘗試'getListView()。setAdapter(...);'。接下來,你確定項目清單已更新嗎?使用'items.length'驗證這一點。在創建一個新的'ArrayAdapter'並調用'setAdapter'之後,甚至不需要'notifyDataSetChanged'。 – Eric

+0

我不確定它是否更新。我所做的只是向ListView中的數據庫中添加一行。然後,我想刷新列表,以便再次形成相同的(MySql)表。 – KickingLettuce

0

你就應該能夠在您的ArrayAdapter調用notifyDataSetChanged(),因爲ArrayAdapter延伸BaseAdapter

http://developer.android.com/reference/android/widget/ArrayAdapter.html

在你的榜樣,你會做這樣的事情,採取的是你的意思是叫的ListView。 setListAdapter()

(ArrayAdapter)listView.getAdapter()).notifyDataSetChanged(); 
+0

謝謝;我有更多的信息更新我的問題。 – KickingLettuce

0

在你的榜樣,你不應該在你的AsyncTask設置適配器。通常在onCreate()中這樣做是個好主意,否則每次調用AsyncTask時都要設置它。如果您將適配器設置爲成員變量,那麼您應該能夠從AsyncTask內調用<adapter>.notifyDataSetChanged()

+0

嘿感謝您的反饋。它實際上是一個成員變量。我將擺脫設置代碼,並離開通知。堅韌我相信我已經嘗試過了。 – KickingLettuce