Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否将项目永久添加到现有alertdialog?_Android_Xml_Add_Android Alertdialog - Fatal编程技术网

Android 是否将项目永久添加到现有alertdialog?

Android 是否将项目永久添加到现有alertdialog?,android,xml,add,android-alertdialog,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&g

我的目标是将项目永久添加到现有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>
我现在想做的就是当用户选择添加一个永久项目时,获取另一个永久项目。关于这一点,我的最后一个问题不够清楚。我不想要选项菜单或上下文菜单

谢谢

编辑:

环顾四周,我可以看到人们说不可能动态添加到数组列表中

目前,我有一个选项菜单,当按下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,但它不会保存它,他们每次都必须输入它


谢谢

您可以在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();

我不确定我是否理解你的问题。。。但我会尽力回答。 首先,您可以在充气后向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");
您还可以使用数据库来存储这些值。如果您希望有一个包含数百台服务器的列表,那么这会更好,因为在这种情况下,以前的解决方案的性能会更高

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


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

据我所知,您无法在运行时编辑这些xml文件。您需要使用其他一些持久性存储服务(sqlite或webservice)将添加的条目保存到。然后,当需要显示它们时,您需要检查替代位置并将其添加到列表中我相信CaseyB是在建议“items”的示例将驻留在某个数据库中,因此您可能需要将默认值(在xml中)与数据库元素连接起来,然后您可以将它们添加到列表中。这是一个正确的假设吗CaseyB?谢谢@Luis,我想这就是我想要的东西。我只希望列表中添加几个服务器。我们将该应用程序作为一个示例,说明使用我们的API可以做什么,因此它不必太多。因此,从首选项开始,文件将包含我最初问题中列出的预设服务器?然后我可以添加到共享首选项文件中,以便下次调用时包含最近添加的条目吗?可以。您应该在第一次运行应用程序时(或者只是测试共享首选项中尚未定义服务器)添加默认服务器列表。稍后,您可以使用上面相同的代码将用户键入的任何其他服务器添加到列表中。请记住,如果您不是要重新打印所有服务器,而是只添加一个新服务器,那么您可能需要删除代码“editor.clear()”行,因为这一行在附加新值之前删除共享首选项文件中的所有信息。当做
    SharedPreferences preferences = getSharedPreferences("FileName", MODE_PRIVATE);
    preferences.getString("server1", "defaultValue");
    preferences.getString("server2", "defaultValue");