小编kcr*_*imi的帖子

在没有LifecycleOwner的自定义视图中设置LiveData观察器

我正在尝试使用新的Android架构组件,并且在尝试将MVVM模型用于自定义视图时遇到了障碍.

基本上我已经创建了一个自定义视图来封装一个公共UI,它是在整个应用程序中使用的相应逻辑.我可以在自定义视图中设置ViewModel但是我必须在自定义视图中使用observeForever()或手动设置LifecycleOwner如下所示,但似乎都不正确.

选项1)使用 observeForever()

活动

class MyActivity : AppCompatActivity() {

    lateinit var myCustomView : CustomView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        myCustomView = findViewById(R.id.custom_view)
        myCustomView.onAttach()
    }

    override fun onStop() {
        myCustomView.onDetach()
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义视图

class (context: Context, attrs: AttributeSet) : RelativeLayout(context,attrs){

    private val viewModel = CustomViewModel()

    fun onAttach() {
        viewModel.state.observeForever{ myObserver }
    }

    fun onDetach() {
        viewModel.state.removeObserver{ myObserver }
    }
}
Run Code Online (Sandbox Code Playgroud)

选项2)从Activity`设置lifecycleOwner

活动

class MyActivity : AppCompatActivity() {

    lateinit var myCustomView : CustomView

    override fun onCreate(savedInstanceState: …
Run Code Online (Sandbox Code Playgroud)

android mvvm android-livedata android-viewmodel android-architecture-components

10
推荐指数
1
解决办法
3574
查看次数