Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从AlertDialog Android中删除视图_Java_Android_Android Layout - Fatal编程技术网

Java 如何从AlertDialog Android中删除视图

Java 如何从AlertDialog Android中删除视图,java,android,android-layout,Java,Android,Android Layout,我正在创建一个带有自定义编辑文本字段的警报对话框 我创建了一个视图变量,然后将其与我的自定义编辑文本字段相关联 requestView = inflater.inflate(R.layout.send_request,null); 然后我将该视图添加到我的AlertDialog中 alert.setView(requestView); 之后,我将onClick方法添加到我的按钮中,以执行警报对话框操作 chatRequestbtn.setOnClickListener(new View.On

我正在创建一个带有自定义编辑文本字段的警报对话框

我创建了一个
视图
变量,然后将其与我的自定义
编辑文本
字段相关联

requestView = inflater.inflate(R.layout.send_request,null);
然后我将该视图添加到我的AlertDialog中

alert.setView(requestView);
之后,我将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();

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

它崩溃时出现以下错误

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)
我认为将视图设为null并在单击按钮时再次添加视图将解决此问题。但同样的问题一再出现。

你的问题就在这里:

AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setView(requestView);
在这种情况下,
alert
不是对话框,而是构建器。因此,每当您尝试显示它时,它都会重建此对话框,并尝试为其添加相同的视图-
requestView
。因为它被缓存在构建器中。要解决它-移动

requestView = inflater.inflate(R.layout.send_request,null);
alert.setView(requestView);
到显示对话框的OnClick方法。所以它应该是这样的:

chatRequestbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              requestView = inflater.inflate(R.layout.send_request,null);
              alert.setView(requestView);

                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();

            }
        });

如果要使用现有视图,请使用此选项

alert.setOnDismissListener(new OnDismissListener(){
    ((ViewGroup)requestView.getParent()).removeView(requestView);
});

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

您想设置一个on侦听器。我做了这样的事情: 该对话框应设置一个打开的侦听器

alert.setOnDismissListener(new DialogInterface.OnDismissListener()  {
       @Override
       public void onDismiss(DialogInterface dialog) {
              ((ViewGroup)requestView.getParent()).removeView(requestView);
       }
 });

能否提供如何创建和显示AlertDialog的代码示例?AlertDialog.Builder alert=新建AlertDialog.Builder(此)@GrimmyDo每次显示对话框时都要重新创建它吗?实际上,如果在显示对话框的地方提供完整的OnClick方法,这将非常有用。否,我在OnCreate方法中添加了它@Grimmyth这应该是问题的正确答案:如何从AlertDialog Android中删除视图。