永久性地将项目添加到现有的alertdialog?

时间:2012-09-21 14:25:06

标签: android xml add alertdialog android-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?或者我会遇到无法动态添加列表项的相同问题。

我有能力让用户输入自己的网址但不保存,他们必须每次都输入。

由于

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解你的问题...但我会尽力回答。 首先,您可以在对其进行充气后向alertDialog添加dinamically新选项。你不能做的是在你膨胀的地方向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");

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

最后,您可以将信息存储在一个文件中,但这需要更多代码,而且我没有看到任何真正的好处。

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

答案 1 :(得分: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();