【发布时间】:2022-02-18 20:19:02
【问题描述】:
考虑以下简单设置。 1 个片段和 1 个 ViewModel:
片段
class TestFragment : Fragment() {
private val viewModel by lazy {
ViewModelProviders.of(this).get(TestViewModel::class.java)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_test, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testLiveData.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
Log.d("###", "whattt")
})
}
}
视图模型
class TestViewModel : ViewModel() {
private val myVariable = Log.d("###", "Test")
val testLiveData = MutableLiveData(false)
}
为什么我从 Fragment 和 ViewModel 都获得了最多 3 次的日志输出??
D/###: Test
D/###: whattt
D/###: Test
D/###: Test
D/###: whattt
D/###: whattt
【问题讨论】:
-
这完全取决于你如何在代码中使用
TestFragment。 -
很好的提示!我发现我的演示应用程序中的片段确实被初始化了 3 次。但在我的“真实”应用程序中,它没有......如果需要,我将进一步调查并更新问题。到目前为止谢谢!
标签: android kotlin android-architecture-components android-livedata android-viewmodel