Android | 指定的子元素已经有一个父元素。你必须先调用removeView()来移除该子元素的父元素。

3
我有以下适配器:
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
    super.onViewAttachedToWindow(holder);
    holder.itemView.setEnabled(mAllowClicks);
    holder.itemView.setClickable(mAllowClicks);
}

@Override
public RealmViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int i) {
    View v = inflater.inflate(R.layout.item_list_layout, viewGroup, false);
    myViewHolder vh = new myViewHolder(v);

    return vh;
}

当我运行我的应用程序时,我收到以下错误信息:
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:3883)
    at android.view.ViewGroup.addView(ViewGroup.java:3736)
    at android.view.ViewGroup.addView(ViewGroup.java:3681)
    at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:638)
    at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107)
    at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7054)
    at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7012)
    at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7000)
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1428)
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
    at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1193)
    at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1043)
    at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4357)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
    at android.view.Choreographer.doCallbacks(Choreographer.java:580)
    at android.view.Choreographer.doFrame(Choreographer.java:549)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5349)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

我正在使用RealmRecyclerAdapter,有人知道发生了什么事吗?

谢谢!

我是这样向适配器中添加项的:

mList = mRealm.where(RealmItem.class).findAll();
mAdapter.UpdateList(mList);

这是UpdateList函数:

    public void UpdateList(RealmResults<RealmItem> newList) {
    super.updateRealmResults(newList);
    mList= newList;
}

3
请分享您设置RecyclerView的活动代码。 - Ashish Ranjan
你能同时发布 RealmViewHolder 吗? - Raghavendra
将代码添加到您向适配器添加子项的位置。 - Muhammed Refaat
你是想给它添加很多视图吗?!! - Muhammed Refaat
我已经添加了加法过程 :) - bailando bailando
显示剩余4条评论
2个回答

1
这个问题发生在将一个项目添加两次到适配器中时,因此当第二次添加时,它检测到它已经有了父级,不能有多个父级,因此会生成错误。
要解决这个问题,你需要每次将其添加到适配器中时首先创建列表的新实例(或任何你要添加的视图),或者至少为每个要添加的视图创建一个新变量。
关于方法updateRealmResults,正如Realm文档所述,它现在已被弃用,必须用以下签名的方法updateDate进行替换:
public void updateData(OrderedRealmCollection<T> data)

0

我刚刚结束了一个类似的情况。

在我的情况下,这是一个包含复杂布局组件列表的RecyclerView。

解决方法如下:

holder.itemView.removeView(yourListHere.getRespectiveClassMethod());

作为onBindViewHolder方法内的最后一条指令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接