5

我有RecyclerView我在下面得到了异常。我只在Crashlytics上得到例外,尽管每天都大量使用该活动,但我从未设法自己再现这个问题。RecyclerView:指定的孩子已经有一个家长。您必须先调用子视图的父视图上的removeView()

我吹上onCreateViewHolder我的看法的方式是:

View v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.list_item, parent, false); 

还有另一种视图类型,它来源于MoPub原生广告。

任何想法可能是什么问题?

Caused by java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the childs parent first. 
      at android.view.ViewGroup.addViewInner(ViewGroup.java:4438) 
      at android.view.ViewGroup.addView(ViewGroup.java:4274) 
      at android.view.ViewGroup.addView(ViewGroup.java:4215) 
      at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:711) 
      at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107) 
      at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7877) 
      at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7835) 
      at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7823) 
      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1565) 
      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
      at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1325) 
      at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1061) 
      at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4726) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:696) 
      at android.view.Choreographer.doFrame(Choreographer.java:628) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880) 
      at android.os.Handler.handleCallback(Handler.java:815) 
      at android.os.Handler.dispatchMessage(Handler.java:104) 
      at android.os.Looper.loop(Looper.java:207) 
      at android.app.ActivityThread.main(ActivityThread.java:5728) 
      at java.lang.reflect.Method.invoke(Method.java) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:683) 

编辑:onCreateViewHolder这样的代码

@Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     if (viewType == MoPubStreamAdPlacer.CONTENT_VIEW_TYPE) { 
      View v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.list_item, parent, false); 
      ViewHolder vh = new ViewHolder(this, v); 
      return vh; 
     } else { 
      final MoPubAdRenderer adRenderer = streamAdPlacer.getAdRendererForViewType(viewType); 
      if (adRenderer == null) { 
       MoPubLog.w("No view binder was registered for ads in MoPubRecyclerAdapter."); 
       // This will cause a null pointer exception. 
       return null; 
      } 
      return new MoPubRecyclerViewHolder(
        adRenderer.createAdView((Activity) parent.getContext(), parent)); 
     } 


    } 
+0

你能分享你的适配器代码吗?特别是onCreateViewHolder()&onBindViewHolder()的代码。 –

+0

增加了'onCreateViewHolder','onBindViewHolder'非常大,不认为它适合,主要是围绕设置文本字段等逻辑,是否有一些特殊的东西,我应该复制? – casolorz

+0

我不知道你是如何创建视图。根据该消息,您可能会返回已在其他地方使用的视图。 –

回答

0

风情景观为我工作

View view = View.inflate(mContext,R.layout.layout_name,null); 

而不是

LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.list_item, parent, false); 

其中parent正在创建问题,将此父级设置为null将解决该问题。

相关问题