2012-09-04 37 views
1

我想用Builder構建AlertDialog。我的對話框必須有多個選項供用戶選擇。我在android開發者網站上發現我可以使用builder.setItems(int,DialogInterface.onClickListener)。我的問題是,即時通訊嘗試傳遞一個列表地址,而不是int。我希望用戶從地址列表中選擇一個選項。這裏是我的代碼說明:用列表填充builder.setItem <>

private List<Address> addresses; 

    protected void updateMap() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Pick an Address"); 

    builder.setItems(addresses, new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface arg0, int choosenAddress) { 

      //address = addresses.get(choosenAddress); //choose result from the array 

     } 
    }); 

在builder.setItems ..我得到一個錯誤,這種說法沒有考慮名單。

回答

2

SetItems需要的CharSequence數組作爲參數,所以你將不得不List<Address>轉換爲List<String>然後用list.toarray()

+0

謝謝..將嘗試它併發布我的結果。 –

+0

我嘗試過..但是我的地理編碼器無法在列表中存儲地址我必須將它保存爲列表

。有什麼建議麼? –

+0

如果您無法將地址轉換爲字符串,您將如何在列表中顯示地址?循環播放列表並不斷添加addresses.toString()到列表 nandeesh

1

的擴展,nandeesh的回答

String [] addressStrings = new String [addresses.size()]; 

for(int i=0; i<addresses.size(); i++) 
    addressStrings[i] = addresses.get(i).toString(); 

你需要重寫toString()方法的Address類,創建有意義的String表示Address對象。

現在在onClick()方法仍可以由給定的索引訪問Address對象,因爲大小和addresses列表的元素順序和addressStrings陣列是相同的。

Address selected = addresses.get(choosenAddress); 
+0

謝謝你......你的回答幫助我理解了很多。 –