小编Mac*_*zki的帖子

将 LiveData 作为 <layout> 标记参数传递

我对我的代码有一个快速的问题。我正在使用 Android MVVM 和 LiveData 编写一个应用程序。我想创建加载布局,它将包含在许多视图中。主要目标是能够传递实时数据,这些数据表示布局是否应该可见以及应使用进度条显示哪些文本信息。

到目前为止,我创建了加载指示器布局,并定义了两个变量“indicatorVisibility”和“progressText”。在附加的代码中,值之一被注释掉。我还创建了 BindingAdapters 来设置控件的可见性和文本。

这是我的带有进度条的布局

<data>

    <variable
        name="indicatorVisibility"
        type="android.arch.lifecycle.LiveData"/>
    <!--<variable-->
        <!--name="progressText"-->
        <!--type="android.arch.lifecycle.LiveData"/>-->
</data>


<android.support.constraint.ConstraintLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/layout_loading_background"
    >

    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyle"
        android:layout_width="@dimen/layout_loading_progress_bar_size"
        android:layout_height="@dimen/layout_loading_progress_bar_size"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textView7"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!--android:text="@{progressText}"-->

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="TextView"
        android:textColor="@color/layout_loading_text"
        android:textSize="@dimen/layout_loading_text_size"
        app:layout_constraintBottom_toBottomOf="@+id/progressBar2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/progressBar2"
        app:layout_constraintTop_toTopOf="@+id/progressBar2" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这就是我将其包含在片段布局中的方式

<include layout="@layout/layout_loading_info"
            app:indicatorVisibility="@{viewModel.isBusy}"
            />
Run Code Online (Sandbox Code Playgroud)

这些是我的绑定适配器:

@BindingAdapter("android:visibility")
fun getVisibility(view: View, liveData: LiveData<Boolean>){
        liveData.observe(view.getLifecycleOwner(), Observer {
        view.visibility = if(it == true) View.VISIBLE else View.INVISIBLE
    })
}

@BindingAdapter("app:text")
fun …
Run Code Online (Sandbox Code Playgroud)

layout android android-databinding android-livedata

3
推荐指数
1
解决办法
1327
查看次数