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

AlertDialog in onClick crashes on second click

我有下面的代码,它在单击 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: The specified child already has a parent. You must call removeView() on the child's parent first.

[编辑] 使 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();

    }
});