使用AlertDialog输入填充列表<string>

时间:2016-01-09 18:11:45

标签: android arrays list android-alertdialog illegalstateexception

构建我的第一个应用程序并且无法自己找到解决方案。

我的应用做了什么:

  • MainActivity提示用户输入玩家数量
  • 按确定,输入传递到下一个活动

现在我想要提示用户一个接一个地用AlertDialog输入播放器名称。这些名称应存储在数组中。

到目前为止我的代码:

public class MainScreen extends AppCompatActivity {

    private static final String TAG = MainScreen.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);

        try {

            Intent intent = getIntent();
            final int sumPlayers = getIntent().getIntExtra("sumPlayers", 0);
            final List<String> playerNames = new ArrayList<>();

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            final EditText input = new EditText(getBaseContext());
            input.setTextColor(Color.BLACK);
            //input.setSingleLine();

            for (int c=0; c<sumPlayers; c++) {

                builder.setTitle("Input Player Name");
                builder.setView(input);

                builder.setPositiveButton("ADD", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        playerNames.add(input.getText().toString());
                    }
                });

                builder.show();
            }

            ArrayAdapter<String> playerAdapter = new ArrayAdapter<String>(this, R.layout.player_list_item, R.id.editText, playerNames);
            ListView listView = (ListView) findViewById(R.id.listView_main);

            listView.setAdapter(playerAdapter);

        } catch (Exception e) {
            System.out.println("2te Act");
            Log.e(TAG, "Error@: ", e);
        }
    }
}

我得到了这个例外@ builder.show();

  

Java.lang.IllegalStateException:指定的子级已有父级。您必须先在孩子的父母身上调用removeView()。

除了一个小问题外,它没有for循环工作。 当我将输入字段设置为setSingleLine();时,listView保持为空。

1 个答案:

答案 0 :(得分:1)

您正在创建一个AlertDialog.Builder,并使用不同的值重复设置标题,视图和正面按钮。您可能需要在for循环中移动此逻辑:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final EditText input = new EditText(getBaseContext());
        input.setTextColor(Color.BLACK);
        //input.setSingleLine();