Android Dialog 错误指定的子项已经有一个父项。您必须先在孩子的父母上调用 removeView()

5 java android listview android-layout

我正在尝试向我的 listView 提供数据,当单击 FAB 时,它会显示一个带有一个 editText 和两个按钮的对话框。第一次它允许我向 ListView 提供数据。但是当我第二次尝试时,它显示了错误:

致命异常:主要
过程:com.example.app.wounderlist.wounderlist,PID:3790
java.lang.IllegalStateException: 指定的 孩子 已经 一个 必须 孩子的父母调用 removeView() 首先。 在 android.view.ViewGroup.addViewInner(ViewGroup.java:3562) 在 android.view.ViewGroup.addView(ViewGroup.java:3415) 在 android.view.ViewGroup.addView(ViewGroup.java:3391) 在 android.support。 v7.app.AlertController.setupCustomContent(AlertController.java:647) 在 android.support.v7.app.AlertController.setupView(AlertController.java:463) 在 android.support.v7.app.AlertController.installContent(AlertController.java:226) 在 android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257) 在 android.app.Dialog.dispatchOnCreate(Dialog .java:361) 在 android.app.Dialog.show(Dialog.java:262) 在 com.example.app.wounderlist.wounderlist.HomeFragment$1.onClick(HomeFragment.java:79) 在 android.view.View.performClick(View.java:4444) 在 android.view.View$PerformClick.run(View.java:18457) 在 android.os.Handler.handleCallback(Handler.java:733) 在android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread。main(ActivityThread.java:5113) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) at dalvik.system.NativeStart.main(Native Method)5113) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:796) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main(Native Method)5113) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:796) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main(Native Method)invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main(Native Method)invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main(Native Method)515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main (本机方法)515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main (本机方法)第612话第612话

这是我的代码

//create a dialog box with a editText and a Add button when pressing the #FAB
        final EditText taskEditText = new EditText(getActivity());
        mFab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog dialog = new AlertDialog.Builder(getActivity())
                        .setTitle("Add a new task")
                        .setMessage("What do you want to do next?")
                        .setView(taskEditText)
                        .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                //for getting text from the editText
                                String itemText = taskEditText.getText().toString();
                                mItemsAdapter.add(itemText);


                            }
                        })
                        .setNegativeButton("Cancel", null)
                        .create();
                dialog.show();
            }
        });
Run Code Online (Sandbox Code Playgroud)

raf*_*007 7

您正在创建AlertDialog每个按钮单击的新实例。AlertDialogOnClickListener内部类之外创建一个 final 。

尝试这个:

 final EditText taskEditText = new EditText(getActivity());
AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity());
builder1.setMessage("What do you want to do next?");
builder1.setCancelable(true);

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

                                //for getting text from the editText
                                String itemText = taskEditText.getText().toString();
                                mItemsAdapter.add(itemText);

                            }
                        });

builder1.setNegativeButton(
   "Cancel", null);

AlertDialog alert11 = builder1.create();

 mFab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               alert11.show();
            }
        });
Run Code Online (Sandbox Code Playgroud)