2012-09-21 79 views
1

我的目標是將項目永久添加到現有的AlertDialog。將項目永久添加到現有的alertdialog?

的AlertDialog的XML數組是:

<array name="serverchoice"> 
    <item>@string/chicago_server</item> 
    <item>@string/london_server</item> 
    <item>@string/sanjose_server</item> 
    <item>@string/washington_server</item> 
    <item>@string/chicagoq_server</item> 
    <item>@string/londonq_server</item> 
    <item>@string/sanjoseq_server</item> 
    <item>@string/washingtonq_server</item> 
</array> 

正如你可以看到它的服務器列表,我想用戶可以添加自己的服務器,而不必使用預設服務器。

我創建了一個帶有文本框和按鈕的頁面,以便用戶可以輸入服務器。當用戶單擊添加服務器按鈕時,我想將條目添加到列表中。

目前,當用戶從AlertDialog選擇一個菜單項就得到處理是這樣的:

// Choose Server method 

    private void openServerDialog() { 
     new AlertDialog.Builder(this)  
     .setTitle(R.string.server_title) 
     .setItems(R.array.serverchoice, 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialoginterface, 
        int i) { 
       setServer(i); 
      } 
     }) 
     .show(); 
    } 

private void setServer(int i) { 


     if (String.valueOf(i).equals("0")){ 
      CustomServer.setText("mcsord.visualware.com"); 
     } 
     else if (String.valueOf(i).equals("1")){ 
      CustomServer.setText("mcslhr.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("2")){ 
      CustomServer.setText("mcssjc.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("3")){ 
      CustomServer.setText("mcsiad.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("4")){ 
      CustomServer.setText("qualitytestord.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("5")){ 
      CustomServer.setText("qualitytestlhr.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("6")){ 
      CustomServer.setText("qualitytestsjc.visualware.com"); 
      } 
     else if (String.valueOf(i).equals("7")){ 
      CustomServer.setText("qualitytestiad.visualware.com"); 
      } 

} 

所有我想現在做的就是另一種永久性的項目,當用戶選擇添加一個。我對此的最後一個問題還不夠清楚。我不想要一個選項菜單或上下文菜單。

感謝

編輯:

更我可以看到人們說這是不可能的動態添加到一個數組列表說完看了看四周。

目前我有一個選項菜單,當android手機本身按下菜單按鈕時會出現。我使用的代碼是:

public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.settings_menu, menu); 
     return true; 
    } 



    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
    switch (item.getItemId()) { 
      case R.id.add_server: 
        addNewServer(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

是否有可能創建,而不是AlertDialog上面顯示的另一個選項菜單和使用?或者我會遇到無法動態添加列表項目的相同問題。

我有一個用戶輸入他們自己的URL的能力,但它不能保存它,他們將不得不每次都輸入它。

感謝

+0

據我所知,你不能在運行時編輯這些XML文件。您將需要使用其他持久存儲服務(sqlite或web服務)來保存添加的條目。那麼當它顯示他們需要檢查替代位置並將其添加到列表中時 –

回答

2

我不確定我是否理解你的問題......但我會盡力回答。 首先,您可以在給它們充氣之後向alertDialog添加新的選項。你不能做的是從你膨脹的地方向xml添加新行。

話雖如此,您需要在活動完成時將新服務器存儲在某個位置,以便您稍後可以恢復它們。對於這一點,你有幾種選擇,我會用一個我認爲開始是最簡單的:

存儲服務器在共享偏好文件:

保存例如

Editor editor = getSharedPreferences("FileName", MODE_PRIVATE).edit(); 
    editor.clear(); 
    editor.putString("server1", "serverName1"); 
    editor.putString("server2", "serverName2"); 
    editor.commit(); 

閱讀例如:

SharedPreferences preferences = getSharedPreferences("FileName", MODE_PRIVATE); 
    preferences.getString("server1", "defaultValue"); 
    preferences.getString("server2", "defaultValue"); 

您還可以使用數據庫來存儲值。如果您希望有一個包含數百臺服務器的列表,這樣會更好,因爲以前的解決方案的性能將在這種情況下得到解決。

最後,您可以將信息存儲在一個文件中,但這需要更多的代碼,我看不到它的任何真正的好處。

如果我沒有回答你的問題,請讓我知道。祝你好運。

+0

謝謝@Luis,我認爲這是我所追求的。我只希望將幾個服務器添加到列表中。我們將該應用作爲使用我們的API可以完成的一個示例,因此它不一定非常廣泛。 –

+0

因此,首先使用首選項文件將包含我的第一個問題中列出的預先設置的服務器? 然後我可以添加到共享首選項文件,所以下次它被稱爲它包括最近添加的條目? –

+0

是的。您應該在第一次應用程序運行時(或者只是測試沒有服務器尚未在共享首選項中定義)添加您的默認服務器列表。稍後,您可以將用戶輸入的任何其他服務器添加到列表中,只需使用上面的相同代碼即可。請記住,如果您不是在重新打印所有服務器,而只是添加一個新的服務器,則可能需要刪除「editor.clear()」代碼行,因爲此行會刪除共享首選項文件中的所有信息然後再追加新的值。問候 – Luis

1

可以留在XML文件中的默認設置,但是你需要自定義服務器存儲在數據庫中。然後,您可以將兩個來源拖放到一個數組中,並將其放入對話框中。

final CharSequence[] items = {"Red", "Green", "Blue"}; 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Pick a color"); 
builder.setItems(items, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int item) { 
     Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
    } 
}); 
AlertDialog alert = builder.create(); 
+1

我相信CaseyB建議「項目」的示例將駐留在某個數據庫中,因此您可能需要連接默認(在你的XML中)與數據庫元素,然後你可以將它們添加到列表中的那一點。這是CaseyB的正確假設嗎? – onaclov2000

+0

是的,這是正確的。 – CaseyB