Вы постоянно добавляете элемент в существующий алертиалдиалог?

1

Моя цель - постоянно добавлять элемент в существующий AlertDialog.

XML-массив для AlertDialog:

<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-адрес, но он не сохраняет его, они должны будут печатать его каждый раз.

благодаря

  • 0
    насколько я знаю, вы не можете редактировать эти XML-файлы во время выполнения. вам нужно будет использовать какой-либо другой сервис хранилища данных (sqlite или веб-сервис), чтобы сохранить добавленные записи в. затем, когда придет время показать их, вам нужно проверить альтернативное местоположение и добавить их в список
Теги:
android-alertdialog
add
alertdialog

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

Вы также можете использовать базу данных для хранения значений. Это было бы лучше, если бы вы ожидали иметь список с сотнями серверов, так как производительность предыдущего решения была бы излишней в этом случае.

Наконец, вы можете сохранить информацию в файле, но для этого потребуется больше кода, и я не вижу в этом никакой пользы.

Если бы я не ответил на ваш вопрос, просто дайте мне знать. Удачи.

  • 0
    Спасибо @Luis, я думаю, что это то, чего я добиваюсь. Я ожидаю, что в список будет добавлена только пара серверов. Мы включили приложение в качестве примера того, что можно сделать с помощью нашего API, поэтому оно не должно быть обширным.
  • 0
    Таким образом, для начала файл настроек будет содержать предварительно настроенные серверы, как указано в моем первоначальном вопросе? Можно ли добавить файл общих настроек, чтобы при следующем вызове он включал недавно добавленную запись?
Показать ещё 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();
  • 1
    Я полагаю, что CaseyB предполагает, что пример «элементов» будет находиться где-то в базе данных, и поэтому вам, вероятно, потребуется объединить значения по умолчанию (в вашем xml) с элементами базы данных, а затем вы можете добавить их в список в этот момент. , Это правильное предположение CaseyB?
  • 0
    Да, это правильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню