You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将RecyclerView移至ListFragment后无限加载问题求助

RecyclerView迁移至Fragment后无限加载的解决方案

问题原因分析

你的代码存在两个核心问题:

  1. 错误继承ListFragment:ListFragment是专为ListView设计的封装类,内部自带ListView及相关生命周期逻辑,与RecyclerView完全不兼容,会引发布局和逻辑冲突,导致无限加载。
  2. 返回错误的布局实例: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:22:45