将RecyclerView移至ListFragment后无限加载问题求助
RecyclerView迁移至Fragment后无限加载的解决方案
问题原因分析
你的代码存在两个核心问题:
- 错误继承ListFragment:
ListFragment是专为ListView设计的封装类,内部自带ListView及相关生命周期逻辑,与RecyclerView完全不兼容,会引发布局和逻辑冲突,导致无限加载。 - 返回错误的布局实例:
onCreateView中你手动创建了RecyclerView,但最终返回了super.onCreateView的结果(即ListFragment的默认ListView布局),导致你配置的RecyclerView从未被显示,绑定的ViewModel数据也未作用到界面控件上,同时ListFragment的默认逻辑可能持续触发加载行为。
修复代码
修改WordListFragment的父类为普通Fragment,并返回自己创建的RecyclerView:
class WordListFragment: Fragment(){ private val wordViewModel: WordViewModel by activityViewModels { WordViewModelFactory((requireActivity().application as WordsApplication).repository) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val recyclerView = inflater.inflate(R.layout.fragment_recycler, container, false) as RecyclerView val adapter = WordListAdapter() recyclerView.adapter = adapter recyclerView.layoutManager = LinearLayoutManager(requireActivity()) wordViewModel.allWords.observe(viewLifecycleOwner) { words -> adapter.submitList(words) } return recyclerView } }
额外说明
- 你之前的适配修改(使用
activityViewModels、requireActivity().application、viewLifecycleOwner)是正确的,无需调整。 - 当前
fragment_recycler.xml的RecyclerView配置没有问题,可保留原内容。
内容的提问来源于stack exchange,提问作者mahor
相关产品推荐
相关产品推荐

