参数异常:LinearLayoutManager已经附加到一个RecyclerView。

4

参数异常:LinearLayoutManager已经附加到RecyclerView

当我尝试为我的RecyclerView设置LayoutManager时,出现了这个异常,并且它说“LinearLayoutManager已经附加”
但在设置LinearLayoutManager之前,我已经检查过我的RecyclerView是否包含LinearLayout

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

enter image description here

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

我不知道为什么会发生这种情况。我该如何防止为我的RecyclerView设置新的LinearLayoutManager
以下是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)

你有多个RV吗? - Blackbelt
@Blackbelt 不,我只有一个 RecyclerView - Linh
分享完整代码 - Surya Prakash Kushawah
你能分享一下logcat吗? - Mohammed Atif
您在哪里初始化layoutManager变量? - Mohammed Atif
你在XML文件中的RecyclerView中使用了app:layoutManager=""吗? - Yatish
1个回答

13
我找到了解决问题的方法。
原因是我的LayoutManager是一个单例对象(因为我使用Dagger来进行注入)。我将其设置为一个RecyclerView,当View刷新时,RecyclerView会刷新,我仍然将这个LayoutManager设置为RecyclerView,这时就会抛出错误

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


2
有没有其他的方法来提供它? 我不想每次都创建新对象。 - Shaktisinh Jadeja
2
你是一个默默无闻的英雄! - legalimpurity

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