onClick中的AlertDialog在第二次单击时崩溃

时间:2016-07-10 15:39:05

标签: android alertdialog

我有以下代码,在单击EditText字段时禁用AlertDialog。这在第一次完美运行,但是如果用户关闭对话框然后再次单击该字段,则应用程序崩溃。

roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
                .minValue(1)
                .maxValue(15)
                .defaultValue(1)
                .textSize(20)
                .enableFocusability(false)
                .wrapSelectorWheel(true)
                .build();

        roomEdit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                new AlertDialog.Builder(SearchActivity.this)
                        .setView(roomnumberPicker)
                        .setTitle("Pick number of Rooms:")
                        .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
                            }
                        }).show();

            }
        });

哪些错误:

  

java.lang.IllegalStateException:指定的子节点已经有了   家长。您必须首先在孩子的父母身上调用removeView()。

1 个答案:

答案 0 :(得分:0)

[编辑]使roomnumberPicker成为最终。您将能够访问它。

您的MaterialNumberPicker首次附加到其父级。所以第二次,当你试图再次将它添加到一个新的AlertDialog时,它会抛出你的异常。

试试这个:

roomEdit.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        final MaterialNumberPicker roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
            .minValue(1)
            .maxValue(15)
            .defaultValue(1)
            .textSize(20)
            .enableFocusability(false)
            .wrapSelectorWheel(true)
            .build();
        new AlertDialog.Builder(SearchActivity.this)
                .setView(roomnumberPicker)
                .setTitle("Pick number of Rooms:")
                .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
                    }
                }).show();

    }
});