IllegalArgumentException:LinearLayoutManager已附加到RecyclerView

Pha*_*inh 2 android android-layout android-recyclerview

IllegalArgumentException:LinearLayoutManager已附加到RecyclerView

我得到这个Exception当我尝试设置LayoutManager为我RecyclerView和它说,LinearLayoutManager is already attached
但在此之前我设置LinearLayoutManager我RecyclerView,我已经检查我的RecyclerView包含LinearLayout或不

如下图所示,您将看到RecyclerView.LayoutManager m= null但仍然会抛出异常

在此输入图像描述

RecyclerView.LayoutManager m = recyclerView.getLayoutManager();
if(recyclerView.getLayoutManager() != null){
      return;
}
try {
      recyclerView.setLayoutManager(layoutManager);
}catch (Exception e){
      Log.e("AA", "setRecyclerViewLayoutManager: ", e);
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样.我怎样才能防止LinearLayoutManager为我设置新的RecyclerView

这是logcat

java.lang.IllegalArgumentException: LayoutManager android.support.v7.widget.LinearLayoutManager@116d9b78 is already attached to a RecyclerView: android.support.v7.widget.RecyclerView{1cbedba4 VFED.... .......D 0,0-1080,1181 #7f0d00b6 app:id/recycler_news}
                                                                    at android.support.v7.widget.RecyclerView.setLayoutManager(RecyclerView.java:1087)
                                                                    at com.toong.map.utils.BindingUtils.setRecyclerViewLayoutManager(BindingUtils.java:76)
                                                                    at com.toong.map.databinding.FragmentNewsBaseBinding.executeBindings(FragmentNewsBaseBinding.java:191)
                                                                    at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355)
                                                                    at android.databinding.ViewDataBinding$6.run(ViewDataBinding.java:172)
                                                                    at android.databinding.ViewDataBinding$7.doFrame(ViewDataBinding.java:238)
                                                                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:765)
                                                                    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)
Run Code Online (Sandbox Code Playgroud)

Pha*_*inh 8

我找到了解决问题的方法.
原因是我LayoutManager是一个单独的对象(因为我使用DaggerInject它).我将它设置为一个RecyclerView那么当View刷新=>在RecyclerView会刷新,我仍然设置此LayoutManagerRecyclerView和错误会抛出

=>解决方案是不要创建LayoutManager单例Object

  • 还有其他方法可以提供吗?我不想每次都创建新对象 (2认同)
  • 你是一个无名英雄! (2认同)