1

我的目标是将一个项目永久添加到现有的 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,但它不会保存它,他们每次都必须继续输入它。

谢谢

4

2 回答 2

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

您还可以使用数据库来存储这些值。如果您希望有一个包含数百台服务器的列表,这会更好,因为在这种情况下,以前的解决方案的性能将会下降。

最后,您可以将信息存储在文件中,但这需要更多代码,而且我看不出它有什么真正的好处。

如果我没有回答你的问题,请告诉我。祝你好运。

于 2012-09-21T15:02:52.983 回答
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();
于 2012-09-21T14:32:48.577 回答