首页 > 解决方案 > 无法访问 Fragment 内的 ViewModel 变量

问题描述

我需要访问 Fragment 中的 ViewModel 变量,这是我的代码:

class FacetFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_facet, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val viewModel = ViewModelProviders.of(requireActivity())[ViewModel::class.java]

    val facetList: RecyclerView = view.findViewById(R.id.facetList)

    facetList.let {
        it.adapter = viewModel.adapterFacet
        it.layoutManager = LinearLayoutManager(requireContext())
        it.autoScrollToStart(viewModel.adapterFacet)
    }
    (requireActivity() as AppCompatActivity).let {
        it.setSupportActionBar(view.findViewById(R.id.toolbar))
        it.supportActionBar?.setDisplayHomeAsUpEnabled(true)
    }
}

}

我对这一行有一个错误:it.adapter = viewModel.adapterFacet但是变量 adapterFacet 存在于 ViewModel 中......如何获取这个变量?

我将非常感谢您的帮助:)

标签: androidkotlinmvvm

解决方案


设为viewModel.adapterFacet内部或公开,您将能够访问它。

笔记:

1-您通过将适配器保留在视图模型中来创建内存泄漏,公开将适配器填充到片段所需的列表并将适配器实例保留在片段中而不是视图模型中

2-您可以使用 apply 而不是 let 和 removeit.或使用 with 方法


推荐阅读