android - 无法访问 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 中......如何获取这个变量?
我将非常感谢您的帮助:)
解决方案
设为viewModel.adapterFacet
内部或公开,您将能够访问它。
笔记:
1-您通过将适配器保留在视图模型中来创建内存泄漏,公开将适配器填充到片段所需的列表并将适配器实例保留在片段中而不是视图模型中
2-您可以使用 apply 而不是 let 和 removeit.
或使用 with 方法
推荐阅读
- c++ - googletest 有没有办法为被调用函数中的断言生成调用者行号?
- sql - 将 varchar 值 'UPDATE table SET TypeId = ' 转换为数据类型 int 时转换失败
- ruby-on-rails - 尝试在使用 ruby on rails 运行方法时添加加载 gif 更新:现在使用 javascript
- ios - MDChipField Swift - 可滚动的方向
- python - 有没有办法将维德复合分数分类为情绪水平/类别?
- java - 命令提示符中的 Java ClassNotFoundException 即使它编译
- python - 如何使用 Pillow 的 Image.load() 函数生成蒙版
- python - 异步线程
- google-apps-script - 在谷歌表格中为 CEP 创建源代码
- three.js - Three.js 光线投射碰撞不起作用