2016-07-12 8 views
3

にremoveView()を呼び出す必要があります:Android |指定された子にはすでに親があります。私は、次のアダプタを持っている子の親の最初の

@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' –

+0

を設定している株式アクティビティコード:parent.removeAllViews() –

+0

uは、同様RealmViewHolder投稿することができますか。? – Raghavendra

答えて

1

この問題は、項目がアダプタに二回追加したときに起こるので、ときそれは2回目を追加しました、それはすでにそれが親を持っていることを検出し、それは1つ以上の親を持つことができません、したがって、エラーが生成されました。

解決するには、アダプタに追加するたびにリストの新しいインスタンス(または追加するビュー)を作成するか、追加するビューごとに少なくとも新しい変数を作成する必要があります。

そして方法updateRealmResultsについて、documentation of Realmに述べたように、それを廃止し、それには次のシグネチャを取る方法updateDateに交換する必要がありますされています

public void updateData(OrderedRealmCollection<T> data) 
0

私は似たような状況を終了しています。

私のケースでは、複雑なレイアウトコンポーネントのリストを含むRecyclerViewでした。

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

onBindViewHolderメソッド内の最後の命令として:

を用いて解きます。

関連する問題