我有以下适配器:
@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;
}
答案 0 :(得分:1)
当一个项目向适配器添加两次时会发生此问题,因此,当它第二次添加时,它会检测到它已经有父项,并且它不能有多个父项,因此会生成错误。
要解决这个问题,每次将其添加到适配器时,首先必须创建列表的新实例(或者您添加的任何视图),或者至少为您添加的每个视图创建一个新变量。
关于方法updateRealmResults
,如documentation of Realm中所述,现在已弃用,必须使用以下签名的方法updateDate替换:
public void updateData(OrderedRealmCollection<T> data)
答案 1 :(得分:0)
我刚刚结束了类似的情况。
就我而言,它是一个包含复杂布局组件列表的RecyclerView。
解决使用:
holder.itemView.removeView(yourListHere.getRespectiveClassMethod());
作为onBindViewHolder方法中的最后一条指令。