2012-01-16 92 views
8

所以,如果我創建一個AlertDialog像這樣:Android - 刷新AlertDialog中的數據?

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
b.create().show(); 

然後,我要更新列表中的項目,即MyStringArray已更改爲具有更多或更少的項目。我似乎無法找到辦法做到這一點。到目前爲止,我試過從AlertDialog獲取ListView,但我似乎無法讓.setAdapter工作。這是正確的方法,還是有更好的方法來做到這一點?

回答

9

我還沒有嘗試過自己,但從我建立的所有其他應用程序我很確定這將解決您的問題。

而不是使用setItems的,請嘗試使用setAdapter()方法,並將已經從你StringArray初始化數據的ArrayAdapter。然後,當您知道數據已更改時,可以使用getListView()來獲取您的View對象,並從那裏調用getAdapter(),以便您現在直接處理數據集。您可以清除它,然後重新初始化它,或者只需添加/刪除項目。從適配器對象中,如果調用notifyDataSetChanged()它應該使用剛剛提供給適配器的新數據集觸發重新繪製。

希望能幫助你。讓我知道如果它不。

DSC

+0

我還是有點新手與這些對話框工作時。我應該保持DialogInterface.OnClickListener爲OnClickListener,還是像使用普通的Listview一樣使用View.OnClickListener? – Paul 2012-01-16 07:21:06

+0

有點愚蠢的我問,當我可以試試它。看起來像DialogInterface.OnClickListener是要走的路。 – Paul 2012-01-16 07:27:10

1

如果你像我一樣,你想用默認的適配器例如用於multichoice項目,那麼還有一個辦法。

就像其他適配器一樣,只更新字符串數組對象,從對話框實例獲取適配器,將其轉換爲適當的適配器並使其無效。

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
AlertDialog instance = b.create(); 
instance.show(); 

// Later when you need to update 
MyStringArray[0] = "puf"; 
ListView list = instance.getListView(); 
// Now according to whether you used cursor or array for supplying items to the builder 
// you have to cast adapter to either CursorAdapter or ArrayAdapter 
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); 
adapter.notifyDataSetChanged(); 

You can find out more here.