android - 将项目永久添加到现有的警报对话框?

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

我确实可以让用户输入他们自己的 URL,但它不会保存它,他们每次都必须继续输入。

谢谢

最佳答案

我也不确定我是否理解您的问题...但我会尽力回答。 首先,您可以在膨胀后向 alertDialog 添加动态的新选项。您不能做的是从扩充它们的地方向 xml 添加新行。

话虽如此,您需要在 Activity 结束时将新服务器存储在某个地方,以便稍后恢复它们。为此,您有多种选择,我将从我认为最简单的一种开始:

将服务器存储在共享首选项文件中:

保存示例

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

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

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

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

关于android - 将项目永久添加到现有的警报对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532476/

相关文章:

video - 如何在 YouTube 视频标题前添加关键字?

android - FFmpeg concat 与绝对路径

html - 尝试使用 '•' 在我的导航栏子菜单中放置元素符号 •

java - 生成依赖于java参数的html代码

linq - 向匿名 Linq 结果集添加人工行

java - 有没有办法将从所有组合框中选择的值添加到 1 个文本字段中?

android - 如何使MediaPlayer和MediaRecorder同时运行?

android - 处理RxJava的onErrorReturn和OnErrorNotImplementedException

android - 提供网站以在 Android 平板电脑上离线查看的最佳方式

python - BeautifulSoup 能否保留 CDATA 部分?