У меня есть такой фрагмент:
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