我正在学习数据绑定和 mvvm。我有一个问题,我想要一个BaseViewModel.kt
包含一些与 UI 相关的变量,例如isLoading
旗帜和loadingText
。当发出网络请求时,我设置isLoading
为 true 并且我的基本视图模型的某些子级应该设置文本。例如对于一个LoginViewModel.kt
文本可能是“正在登录”。是否可以将这些变量传递给包含的基本布局?
So a login_activity.xml
可能会在其布局中包含此内容:
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="core.sdk.ui.login.LoginViewModel" />
</data>
<!-- Various click listeners using the viewModel variable -->
<include
android:id="@+id/progress_include"
layout="@layout/progress_bar"
android:visibility="@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
bind:viewModel="@{viewModel}"/>
现在我想要我的progress_bar.xml
为了美观和通用并使用基本视图模型:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="core.sdk.ui.login.LoginActivity">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="core.sdk.ui.base.BaseViewModel" />
</data>
<LinearLayout
android:id="@+id/circular_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<android.support.v4.widget.ContentLoadingProgressBar
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/progress_text"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-thin"
android:gravity="center_horizontal"
android:text="@{viewModel.loadingText}"
android:textStyle="italic"
tools:text="loading..." />
</LinearLayout>
我得到的错误是这样的
****/ data binding error ****msg:Cannot find the setter for attribute 'bind:viewModel' with parameter type core.sdk.ui.login.LoginViewModel
如果这不可能,我能看到的唯一替代方法是删除包含并将进度条+文本复制并粘贴到每个视图模型中,这不是很好。
我认为你应该将它投射到绑定中:
<include
android:id="@+id/progress_include"
layout="@layout/progress_bar"
android:visibility="@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
bind:viewModel="@{(core.sdk.ui.base.BaseViewModel)viewModel}"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)