【问题标题】:How can I use Data Binding with ProgressBar?如何将数据绑定与 ProgressBar 一起使用?
【发布时间】:2020-02-06 17:14:38
【问题描述】:

我正在尝试将DataBinding 用于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 代码的布局、数据和变量

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

非常感谢

【问题讨论】:

  • 你想用进度条做什么?
  • 我想用它来让用户知道应用正在加载

标签: android android-databinding android-progressbar


【解决方案1】:

对于progressBar,您需要执行以下操作:

第一: 您应该 import 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文件。

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

您的 isLoading 字段现在应该是 Observable

第三:

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

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

我希望这会有所帮助。

【讨论】:

  • 它在 var isLoading= true 时有效,但我无法让它消失?!!!
  • 确保你已经导入了 View
  • 我将编辑我的答案,包括您的问题的解决方案
  • 好的,请检查一下 addScreenSaverBinding.testing= AddScreenSaverModel("", "") addScreenSaverBinding.testing!!.setLoading(true) //// 对吗
猜你喜欢
  • 2016-04-15
  • 2020-01-11
  • 2018-05-23
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多