如何使用viewmodel数据绑定edittext属性android:已启用?

如何使用viewmodel数据绑定edittext属性android:已启用?,android,android-edittext,android-databinding,android-livedata,Android,Android Edittext,Android Databinding,Android Livedata,要求: 我有一个用户名和密码。我希望密码edittext仅在用户名edittext中输入有效用户名时启用 布局代码: signInFragmentBinding.lifecycleOwner=添加这一行解决了问题。在您的活动中,执行此操作,它将工作: binding.lifecycleOwner = this 为了使绑定作用于LiveData更改,需要提供LifecyclerOwner class MainActivity : AppCompatActivity() { ...

要求: 我有一个用户名和密码。我希望密码edittext仅在用户名edittext中输入有效用户名时启用

布局代码:


signInFragmentBinding.lifecycleOwner=添加这一行解决了问题。

在您的活动中,执行此操作,它将工作:

binding.lifecycleOwner = this
为了使绑定作用于LiveData更改,需要提供LifecyclerOwner

class MainActivity : AppCompatActivity() {

    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.lifecycleOwner = this
        binding.viewModel = viewModel
    }
}

不确定isUsernameValid在这里是否可以是私有的,因为您在xml@P.Juni我有能手/二传手,因此它可以是私人的。非常感谢。成功了。你能详细介绍一下lifecycler的所有者吗?我所能说的就是LiveData之所以被称为LiveData,是因为它与观察它的组件的生命周期紧密相连。LifecycleOwner是一个具有Android生命周期的类。自定义组件可以使用这些事件来处理生命周期更改,而无需在活动或片段中实现任何代码。当我们使用数据绑定将LiveData绑定到视图时,绑定需要知道是否可以执行这些LiveData绑定并更新值。为此,他们需要了解该组件的生命周期。在我们的案例中,它是活动视图。这就是为什么我们提供LifecycleOwner,以便数据绑定可以向绑定的LiveData组件发送更新。
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    if (activity != null) {
        signInViewModel = ViewModelProviders.of(this).get(SignInViewModel::class.java)
        signInFragmentBinding.sharedModel = mainActivityViewModel
        signInFragmentBinding.lifecycleOwner = this
        signInFragmentBinding.model = signInViewModel
    }
}
binding.lifecycleOwner = this
class MainActivity : AppCompatActivity() {

    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.lifecycleOwner = this
        binding.viewModel = viewModel
    }
}