首页 > 解决方案 > 如何将数据绑定与 ProgressBar 一起使用?

问题描述

我正在尝试使用DataBindinga ProgressBar,但我不知道如何

这是我的 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="addActivity"
            type="com.khairo.dallasadmin.view.addScreenSaver.AddScreenSaver" />

        <variable
            name="saverModel"
            type="com.khairo.dallasadmin.model.addScreenSaver.AddScreenSaverModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".view.addScreenSaver.AddScreenSaver">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/image"
            android:layout_width="@dimen/_130sdp"
            android:layout_height="@dimen/_230sdp"
            android:src="@drawable/ic_add"
            android:onClick="@{()->addActivity.selectImage()}"
            android:layout_marginTop="@dimen/_25sdp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />

        <androidx.appcompat.widget.AppCompatButton
            android:layout_width="@dimen/_100sdp"
            android:layout_height="@dimen/_35sdp"
            android:text="@string/send_image"
            android:background="@drawable/carve_blue"
            android:textStyle="bold"
            android:textColor="@color/white"
            android:onClick="@{()->addActivity.sendImage()}"
            android:textSize="@dimen/_11ssp"
            android:layout_margin="@dimen/_15sdp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" />
    
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

如您所见,我添加了

布局、数据和变量到 xml 代码

我现在必须在模型中做什么?

非常感谢<3

标签: androidandroid-databindingandroid-progressbar

解决方案


对于进度条,您需要执行以下操作:

首先: 您应该导入 View以便能够在数据标签中处理您的 progressBar 的可见性,如下所示:

<data>
.....
import type="android.view.View"/>
<data>

其次: 您应该将isLoading变量添加到布尔类型的模型中。这个isLoading变量会根据您的业务而更改,因此当您需要您的 progressBar 可见时,您将其保持为true

为了让它顺利运行,你应该让它像 Observable 一样。你可以通过让你的模型扩展 BaseObservable 来做到这一点

公共类yourmodel扩展 BaseObservable

那么您应该为isLoading生成 getter 和 setter,如下所示:

     @Bindable
     public boolean isLoading() {
          return isLoading;
     }
     public void setLoading(boolean loading) {
          isLoading = loading;
          notifyPropertyChanged(BR.loading);
     }

注意:您可能需要构建项目以生成BR文件。

您可以查看此模型以获取更多详细信息

你的isLoading字段现在应该是 Observable

第三:

您应该根据 的值添加可见性属性isLoading

 <ProgressBar
        ..........
        ..........
        android:visibility="@{addActivity.isLoading ? View.VISIBLE : View.GONE}"/>

我希望这会有所帮助。


推荐阅读