我的视图模型数据未绑定到 edittext
My viewmodel data is not being bound to edittext
我已经将一个视图模型绑定到一个 activity 并且工作正常,但是在另一个 activity 中我绑定了我的视图模型没有显示任何数据。这是我的 activity:
中的视图模型变量声明
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data>
<variable name="profileViewModel"
type="com.kreeti.gogal.ui.profile.ProfileViewModel"
/>
</data>
......
<EditText
style="@style/convertible_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_edit"
android:text="@={profileViewModel.firstName}"/>
这是我的视图模型:
class ProfileViewModel constructor(
val repository: ProfileRepository,
private val mContext: Context
) : ViewModel() {
var firstName: String? = null
....
init {
Coroutines.main {
try {
repository.getProfileDetails().let {
firstName = it.data.first_name // Here I am fetching the data
}
....
}
}
这是我的activityclass
class EditProfile : AppCompatActivity(), ResponseListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val networkConnectionInterceptor = NetworkConnectionInterceptor(this)
val api = BaseApi.invoke(networkConnectionInterceptor, AuthorizedApi::class.java)
val profileRepository = ProfileRepository(api)
val factory = ProfileViewModelFactory(profileRepository, this)
val viewModel = ViewModelProvider(this, factory).get(ProfileViewModel::class.java)
val binding: ActivityEditProfileBinding = DataBindingUtil.setContentView(this, R.layout.activity_edit_profile)
binding.profileViewModel = viewModel
}
我无法理解为什么我的 edittext 没有获取数据
如果您在 xml 中使用数据绑定,它应该是:android:text="@{profileViewModel.firstName}"
而不是 android:text="@={profileViewModel.firstName}"
,除此之外我没有发现任何问题。
您可能也对此感兴趣codelab
PS: profileViewModel
不应该引用 context
因为它可能会产生一些错误,如果你真的需要 context
你可以使用 AndroidViewModel
而不是 ViewModel
实现。 AndroidViewModel
允许您访问 ApplicationContext。
我已经将一个视图模型绑定到一个 activity 并且工作正常,但是在另一个 activity 中我绑定了我的视图模型没有显示任何数据。这是我的 activity:
中的视图模型变量声明<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data>
<variable name="profileViewModel"
type="com.kreeti.gogal.ui.profile.ProfileViewModel"
/>
</data>
......
<EditText
style="@style/convertible_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_edit"
android:text="@={profileViewModel.firstName}"/>
这是我的视图模型:
class ProfileViewModel constructor(
val repository: ProfileRepository,
private val mContext: Context
) : ViewModel() {
var firstName: String? = null
....
init {
Coroutines.main {
try {
repository.getProfileDetails().let {
firstName = it.data.first_name // Here I am fetching the data
}
....
}
}
这是我的activityclass
class EditProfile : AppCompatActivity(), ResponseListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val networkConnectionInterceptor = NetworkConnectionInterceptor(this)
val api = BaseApi.invoke(networkConnectionInterceptor, AuthorizedApi::class.java)
val profileRepository = ProfileRepository(api)
val factory = ProfileViewModelFactory(profileRepository, this)
val viewModel = ViewModelProvider(this, factory).get(ProfileViewModel::class.java)
val binding: ActivityEditProfileBinding = DataBindingUtil.setContentView(this, R.layout.activity_edit_profile)
binding.profileViewModel = viewModel
}
我无法理解为什么我的 edittext 没有获取数据
如果您在 xml 中使用数据绑定,它应该是:android:text="@{profileViewModel.firstName}"
而不是 android:text="@={profileViewModel.firstName}"
,除此之外我没有发现任何问题。
您可能也对此感兴趣codelab
PS: profileViewModel
不应该引用 context
因为它可能会产生一些错误,如果你真的需要 context
你可以使用 AndroidViewModel
而不是 ViewModel
实现。 AndroidViewModel
允许您访问 ApplicationContext。