允许用户将项目添加到Android中的菜单?

时间:2012-09-21 12:31:54

标签: android xml contextmenu add

我正在尝试为用户添加将项添加到上下文菜单的功能。

菜单的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>

正如您所看到的那样,它是服务器列表,我希望用户能够添加自己的服务器而不必使用预设服务器。

我创建了一个带有文本框和按钮的页面,以便用户可以进入服务器。当用户单击“添加服务器”按钮时,我希望将条目添加到列表中。

点击时我正在处理菜单项的方式如下:

    // 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");
            }

}

所以我的下一个问题是如何处理新条目。

第一步是将新条目添加到列表中。

任何帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:0)

创建一个包含2个edittexts的alertdialog;一个用于名称,另一个用于URL;然后用它来介绍一个新的条目;就像在this example

中提到的那样

答案 1 :(得分:0)

您无法将用户的输入存储到包含您静态创建的服务器的阵列资源中。您必须将用户输入的服务器存储到您保存到手机内存,SQLite数据库或使用“共享首选项”(推荐)的文件中。 [http://developer.android.com/guide/topics/data/data-storage.html]。

在回答你的第二个问题时,我可能采取了不同的整体方法。

在您的应用程序入口点,使用共享首选项设置系统

// Shared Preference string
public static final String PREFS = "SomeName";
// Editor to customize preferences
private Editor settingsEditor;
// Shared preference
private SharedPreferences prefs;
//list that will hold all the servers for the menu
private ArrayList<String> menuList = new ArrayList<String>();

在onCreate方法中(用户第一次打开应用程序),您将把定义的服务器名称放入系统中

prefs = getSharedPreferences(PREFS, MODE_PRIVATE);

// Get shared preferences and set up the preference editor
settingsEditor = prefs.edit();

// See if the app has been initialized
if (!prefs.getString("initialized", "").equals("yes")) {

settingsEditor.putString("server0","mcsord.visualware.com");
settingsEditor.putString("server1","mcslhr.visualware.com");   

//...do the above step to put the rest of them in
settingsEditor.putInt("menuItemsCount",8);
settingsEditor.putBoolean("initialized", true);
settingsEditor.commit();
}

之后,您将要填充菜单列表

int i = prefs.getInt("menuItemCount", 0);
for(j = 0; j < i; j++)
     menuList.add(prefs.getString("sever" + j,"");

现在您要做的是在用户打开页面后,输入服务器名称并单击按钮:        如果它是同一活动中的对话框,您可以将其添加到列表和共享首选项中        如果它在另一个活动中,通过and intent发送,覆盖onActivityResult方法,然后将该字符串添加到列表和共享首选项。

在onCreateContextMenu方法中,遍历包含所有服务器的列表并将其添加到菜单中。最后,您可以在代码中执行此操作

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

希望这有帮助。