0

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

菜单的 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");
            }

}

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

无论哪种方式,第一步都是将新条目添加到列表中。

任何帮助都会很棒。

谢谢

4

2 回答 2

0

创建一个包含 2 个编辑文本的警报对话框;一个用于名称,另一个用于 URL;然后用它来引入一个新条目;就像它在这个例子中提到的

于 2012-09-21T13:41:11.413 回答
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,"");

现在您要做的是在用户打开页面后,输入他们的服务器名称并单击按钮: 如果它是同一活动中的对话框,您可以将其添加到列表和共享首选项中 如果它在另一个活动中,通过意图发送它,覆盖 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();
}

希望这可以帮助。

于 2012-09-21T14:19:01.297 回答