【发布时间】:2020-08-04 14:55:32
【问题描述】:
我的片段是这样的:
class LoginFragment : Fragment() {
private lateinit var viewModel: AuthViewModel
private lateinit var mBinding: FragmentLoginBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
mBinding = DataBindingUtil.inflate<ViewDataBinding>(
inflater, R.layout.fragment_login, container, false
) as FragmentLoginBinding
val view: View = mBinding.root
viewModel = ViewModelProvider(requireActivity()).get(AuthViewModel::class.java)
mBinding.login?.invoke(viewModel)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initLoginButton()
}
fun initLoginButton() {
mBinding.btLogin.setOnClickListener {
Log.d("d--login", "login clicked")
Log.d("d--login", viewModel.username.value)
Log.d("d--login", viewModel.password.value)
}
}
}
我的 AuthViewModel 看起来像这样:
class AuthViewModel : ViewModel() {
operator fun invoke(viewModel: AuthViewModel) {}
val username = MutableLiveData<String>("")
val password = MutableLiveData<String>("")
val passwordRe = MutableLiveData<String>("")
}
在 XML 中我有两个编辑文本:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusedByDefault="true"
android:inputType="text"
android:text="@={login.username}"
android:textColor="@color/colorWhite" />
但是视图模型上的用户名没有更新,我也尝试过 ObservableField。同样的问题。
在家长活动中,我有:
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_authentication)
viewModel = ViewModelProvider(this).get(AuthViewModel::class.java)
mBinding.auth?.invoke(viewModel)
mBinding.lifecycleOwner = this
【问题讨论】:
标签: android kotlin android-livedata android-viewmodel