Farshid Ahmadi
Farshid Ahmadi

Reputation: 513

How To Add Changing Number Of EditText Objects in AlertDialog

I'm Developing a game so I want to get player name using an AlertDialog. But I don't Know certain number of players, it's Variable between 2 to 16!

I've added an spinner to ask about the NumberOfPlayers and a Button to Show AlertDialog then I tried to add certain number of EditText Using for loop. It doesn't have error but when I run application on phone, I just have Ok and Cancel Buttons. I couldn't resolve problem and become appreciate if someone help me.

This is My 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();

Upvotes: 0

Views: 37

Answers (1)

android
android

Reputation: 3090

Just change your code with below one and you will get dynamic edittext in alert dialog:

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

Let me highlight problems in your code are:

  1. you are using "aux==NumberOfPlayers" in "for loop" which is wrong. it should be "aux < NumberOfPlayers"

  2. you are not initializing edittext in "for loop" such as "input[aux] = new EditText(MainActivity.this);"

  3. you are not giving height and width for both linear layout as well edittext after initializing such as ".setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));"

Upvotes: 1

Related Questions