RecyclerView嵌套CoordinatorLayout后列表项不显示的问题排查
看起来你的问题大概率出在RecyclerView的布局管理器冲突或者自定义LayoutManager未正确实现上,结合你的代码,我整理了几个可行的解决方案:
1. 移除XML中冲突的自定义LayoutManager设置
你在XML里给RecyclerView设置了一个自定义的LayoutManager:
app:layoutManager="com.example.kayc.projectplanner.FloatButtonBehavior.RVlayoutmanager"
但同时又在Java代码里手动设置了LinearLayoutManager:
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
这种重复设置很可能导致布局管理器工作异常,而且如果你的RVlayoutmanager没有正确实现LayoutManager的核心逻辑,就会直接导致列表项无法渲染。
修改方法:
把XML中RecyclerView的app:layoutManager这一行完全删除,保留代码里的LinearLayoutManager设置即可。修改后的RecyclerView XML代码如下:
<android.support.v7.widget.RecyclerView android:id="@+id/list" android:name="com.example.kayc.projectplanner.fragmenti.TodoFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" tools:context=".fragmenti.TodoFragment" tools:listitem="@layout/fragment_todo" />
另外我把android:name的值改成了当前Fragment的正确路径(com.example.kayc.projectplanner.fragmenti.TodoFragment),原来的路径写错了,虽然这个不是主要问题,但修正后更规范。
2. 确认DummyContent数据是否正常加载
虽然你说单独用RecyclerView时显示正常,但还是建议在代码里加个打印,确认嵌套CoordinatorLayout时数据是否还存在:
在onCreateView里设置Adapter之前,添加一行代码:
Log.d("TodoFragment", "DummyContent item count: " + DummyContent.ITEMS.size());
如果打印出来的数量是0,那要检查DummyContent的初始化逻辑是否在嵌套场景下没有正确执行。
3. 检查列表项布局(fragment_todo)的正确性
确保你的item布局fragment_todo.xml没有以下问题:
- 根布局高度设置为
match_parent(这样每个item会占满整个屏幕,看起来就像只有一个item或者没有),应该改成wrap_content - 内部TextView的
visibility被设置为gone - 文本颜色和背景色一致,导致内容看不见
4. 验证CoordinatorLayout的布局约束
CoordinatorLayout本身不会影响RecyclerView的显示,但可以暂时移除FAB,测试RecyclerView是否能正常显示,排除FAB的干扰。
按照上面的步骤修改后,应该就能解决列表项不显示的问题了。
内容的提问来源于stack exchange,提问作者Odyssey

