如何从AlertDialog Android中删除视图

Dog*_*oge 3 java android android-layout

我正在使用自定义 EditText 字段制作警报对话框。

我创建了一个View变量,然后将其与我的自定义EditText字段相关联。

requestView = inflater.inflate(R.layout.send_request,null);
Run Code Online (Sandbox Code Playgroud)

然后我将该视图添加到我的 AlertDialog 中

alert.setView(requestView);
Run Code Online (Sandbox Code Playgroud)

之后,我将 onClick 方法添加到我的按钮以执行警报对话框操作。

chatRequestbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                alert.setPositiveButton("Send", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        request = requestMsg.getText().toString();

                        send();

                    }
                });
                alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                    }
                });

                alert.show();

            }
        });
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是在按下警报对话框上的取消选项后,当我再次按下按钮以执行警报对话框选项时。

它因以下错误而崩溃。

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
                                                                           at android.view.ViewGroup.addViewInner(ViewGroup.java:4417)
                                                                           at android.view.ViewGroup.addView(ViewGroup.java:4258)
                                                                           at android.view.ViewGroup.addView(ViewGroup.java:4230)
                                                                           at android.support.v7.app.AlertController.setupCustomContent(AlertController.java:647)
                                                                           at android.support.v7.app.AlertController.setupView(AlertController.java:463)
                                                                           at android.support.v7.app.AlertController.installContent(AlertController.java:226)
                                                                           at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257)
                                                                           at android.app.Dialog.dispatchOnCreate(Dialog.java:395)
                                                                           at android.app.Dialog.show(Dialog.java:294)
                                                                           at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:955)
                                                                           at com.buckydroid.anonchat.User$3.onClick(User.java:86)
                                                                           at android.view.View.performClick(View.java:5637)
                                                                           at android.view.View$PerformClick.run(View.java:22433)
                                                                           at android.os.Handler.handleCallback(Handler.java:751)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6126)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Run Code Online (Sandbox Code Playgroud)

我虽然将视图设置为空并在单击按钮时再次添加视图将解决问题。但同样的问题一次又一次..

小智 5

如果您想使用现有的视图,请使用它。

alert.setOnDismissListener(new OnDismissListener(){
    ((ViewGroup)requestView.getParent()).removeView(requestView);
});
Run Code Online (Sandbox Code Playgroud)

我将上面的代码从Kotlin手动转换为Java,请在使用前检查。