永久添加项目到现有alertdialog?(Permanently adding an item t

2019-07-31 19:23发布

我的目标是将项目永久添加到现有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手机本身上的菜单按钮的optionsmenu。 我使用的代码是:

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的能力,但它不保存它,他们不得不保持每次在键入它。

谢谢

Answer 1:

我也不知道如果我明白你的问题......但我会尽力回答。 首先,您可以在其中充气后添加dinamically新的选项到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");

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

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

如果我没有回答你的问题,只是让我知道。 祝好运。



Answer 2:

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


文章来源: Permanently adding an item to an existing alertdialog?