Как добавить изменяющееся количество объектов EditText в AlertDialog - PullRequest
0 голосов
/ 13 апреля 2019

Я разрабатываю игру, поэтому хочу получить имя игрока с помощью AlertDialog.Но я не знаю определенного количества игроков, это переменная от 2 до 16!

Я добавил счетчик для запроса NumberOfPlayers и кнопку для отображения AlertDialog, затем я попытался добавить определенное количество EditText, используя цикл for.В ней нет ошибки, но когда я запускаю приложение на телефоне, у меня просто появляются кнопки «ОК» и «Отмена».Я не смог бы решить проблему и стать ценным, если бы кто-то помог мне.

Это Мой AlertDialog

AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("Opponents:");

                LinearLayout layout = new LinearLayout(this);
                layout.setOrientation(LinearLayout.VERTICAL);

                final EditText[] input = new EditText[NumberOfPlayers];
                for (int aux=0;aux==NumberOfPlayers;aux++) {
                    input[aux].setInputType(InputType.TYPE_CLASS_TEXT);
                    layout.addView(input[aux]);
                }

                builder.setView(layout); // this is a set method, not add

                // Set up the buttons
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        for (int aux=0;aux==NumberOfPlayers;aux++){
                            //PlayersTXT[aux].setText(input[aux].getText().toString());
                        }
                    }
                });
                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

                builder.show();

1 Ответ

1 голос
/ 13 апреля 2019

Просто измените ваш код ниже, и вы получите динамический текст редактирования в диалоговом окне предупреждения:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Opponents:");

    LinearLayout layout = new LinearLayout(this);
    layout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
    layout.setOrientation(LinearLayout.VERTICAL);

    final EditText[] input = new EditText[NumberOfPlayers];
    for (int aux=0;aux<NumberOfPlayers;aux++) {
        input[aux] = new EditText(MainActivity.this);
        input[aux].setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        input[aux].setInputType(InputType.TYPE_CLASS_TEXT);
        layout.addView(input[aux]);
    }

    builder.setView(layout); // this is a set method, not add

    // Set up the buttons
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            for (int aux=0;aux==NumberOfPlayers;aux++){
                //PlayersTXT[aux].setText(input[aux].getText().toString());
            }
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    builder.show();

Позвольте мне выделить проблемы в вашем коде:

  1. вы используете "aux == NumberOfPlayers" в "for loop", что неправильно. это должно быть "aux

  2. вы не инициализируете текст редактирования в «цикле for», например: «input [aux] = new EditText (MainActivity.this);»

  3. вы не указываете высоту и ширину как для линейного макета, так и для текста редактирования после инициализации, например ".setLayoutParams (new LinearLayout.LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...