【问题标题】:AlertDialog in onClick crashes on second clickonClick 中的 AlertDialog 在第二次单击时崩溃
【发布时间】:2016-07-11 00:29:03
【问题描述】:

我有以下代码,当单击 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()。

【问题讨论】:

    标签: android android-alertdialog


    【解决方案1】:

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

    【讨论】:

    • roomnumberPicker.getValue() 不起作用,因为 roomnumberPicker 是从内部类访问的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2011-05-27
    相关资源
    最近更新 更多