gpt4 book ai didi

java - Android - 指定的 child 已经有一个 parent 。您必须先对 child 的 parent 调用 removeView()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:19 25 4
gpt4 key购买 nike

我知道有很多问题会询问此错误,但建议的解决方案似乎都不适用于我的问题,至少我看到了这一点。

这是我的日志:

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:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1851)
at com.android.internal.app.AlertController.setupView(AlertController.java:365)
at com.android.internal.app.AlertController.installContent(AlertController.java:206)
at android.app.AlertDialog.onCreate(AlertDialog.java:251)
at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
at android.app.Dialog.show(Dialog.java:225)
at com.company.MyApp.MyActivity$7.onItemClick(MyActivity.java:240)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

这是 MyActivity.java 的 onCreate()。您可以看到显示了一个 Dialog Builder 并为其提供了一些值。 myDialogLayoutmyDialogBu​​ilder 都是私有(private)类成员

@Override
public void onCreate( Bundle savedInstanceState )
{
// ... a bunch of init code...

// Create a dialog builder
myDialogLayout = getLayoutInflater().inflate(R.layout.leaving, null);
myDialogBuilder = new AlertDialog.Builder(this)
.setTitle("My Title")
.setView(myDialogLayout)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick( DialogInterface dialog, int which ) {}
});

// ... more code ...
}

稍后,当我的 Activity 中的某个按钮被点击时,myDialogBu​​ilder 被定制了一点,然后创建并显示了一个对话框。 myDialog 是私有(private)类变量/成员:

// Builder customized a bit
myDialogBuilder
.setMessage("custom message here");

// Dialog created from Builder
myDialog = myDialogBuilder.create();

// Dialog shown
myDialog.show(); // <---- MyActivity.java Line: 240

所以在我的问题上,当我单击我的按钮时,对话框已成功创建。但是在我按下对话框中的取消然后再次按下按钮之后,我在日志中看到了错误。出于某种原因,该 Activity 不希望我重复使用我的 myDialog 对话框。它是一个类成员,因此可以从 onClick 处理程序访问它。每次单击按钮时,myDialog 都是一个新对话框,因为它每次都是由 myDialogBu​​ilder.create() 从头开始​​创建的。

有人知道问题出在哪里吗?我还尝试在按下“取消”按钮时添加 myDialog.dismiss(),但这并没有什么不同。

另外,您可以在我的 myDialogBu​​ilder 中看到,自定义 XML 布局用于对话框的 View 。根据错误消息,它听起来像是要我使用 removeView() 来删除在对话框中使用的 View 。但是 myDialogBu​​ilder.removeView() 不是一个有效的方法。

最佳答案

myDialogLayout 是类成员变量吗?如果是这样,那么在您第一次显示对话框时它已经有一个父级,然后您创建第二个对话框,它也试图成为 myDialogLayout 的父级。每次打开对话框时尝试创建一个新的 myDialogLayout 实例。

关于java - Android - 指定的 child 已经有一个 parent 。您必须先对 child 的 parent 调用 removeView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com