如何使用 Android 数据绑定动态更改视图可见性

2023-11-26

我正在尝试使用数据绑定实现一种简单的视图隐藏/显示。我有一个 api 调用,并且在 api 调用正在进行时我必须显示一个进度条。一旦我收到响应,就必须忽略此进度并显示数据。我尝试使用数据绑定动态更改进度条的可见性。但什么也没发生。仅在第一次根据绑定变量设置进度条可见性。当我更新绑定变量时,它不会动态更新。

以下是我的示例代码

活动:

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    final ViewModel viewmodel = new ViewModel();
    binding.setViewmodel(viewmodel);

    findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            loadData(viewmodel);
        }
    });
}

private void loadData(final ViewModel viewmodel) {
    viewmodel.setLoading(true);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.d(TAG, "Loading finished");
            viewmodel.setLoading(false);
        }
    }, 2000);
}
}

视图模型:

import android.databinding.BaseObservable;
import android.databinding.Bindable;

public class ViewModel extends BaseObservable {

private boolean isLoading;
private String data;


@Bindable
public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}

@Bindable
public boolean isLoading() {
    return isLoading;
}

public void setLoading(boolean loading) {
    isLoading = loading;
 }
} 

活动主文件

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

<data>
    <import type="android.view.View"/>
    <variable name="viewmodel" type="com.test.databindnig.ViewModel"/>
</data>
<LinearLayout
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.databindnig.MainActivity">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="@{viewmodel.isLoading ? View.VISIBLE : View.GONE}"/>
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{viewmodel.data}"
        android:visibility="@{viewmodel.isLoading ? View.GONE : View.VISIBLE}"/>


    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Load data"/>
</LinearLayout>
</layout>

以及应用程序的 build.gradle 中

dataBinding {
    enabled = true
}

这里缺少什么?为什么它不起作用?提前致谢..


您需要通知您的属性值已更改,请尝试此操作

public void setLoading(boolean loading) {
    isLoading = loading;
    notifyPropertyChanged(BR._all);
}

或者如果您只想通知单个变量,请使用 BR.propertyName

notifyPropertyChanged(BR.loading);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Android 数据绑定动态更改视图可见性 的相关文章

  • 数据库“/data/data/msv_database.db”的连接池无法授予连接。连接数:0 个活动连接、1 个空闲连接、0 个可用连接

    我收到以下错误 在整个应用程序中使用单个数据库对象从两个不同线程访问数据库时 数据库连接池 data data msv database db 无法授予与线程 802 的连接 连接数 0 个活动连接 1 个空闲连接 0 个可用连接 也许您想
  • 在 Android 上生成 FileDescriptor 而不先打开文件

    在Android中 是否可以直接从字节数组生成FileDescriptor 而不必先打开文件 在 Android 2 2 中 我动态生成 MIDI 文件 然后使用 MediaPlayer 进行播放 我在下面包含了成功执行此操作的 Main
  • 在 ubuntu 中找不到 .android 文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在哪里可以找到 android在 Ubuntu 中 我想使用debug keystore 转到您的主文件夹并按 ctrl h 瞧
  • 如何使全屏覆盖在方向更改后保持全屏?

    我正在制作一个应用程序 它可以创建在屏幕上行走的微小精灵动画 我有一个主要活动 带有 启动服务 按钮 这会启动一个服务 该服务 在onCreate 创建一个全屏视图并将其附加到根窗口管理器 这部分工作完美 它充满了屏幕 您可以离开应用程序
  • 单击另一个项目/小部件时展开/打开微调器?

    当用户单击另一个按钮时 我试图展开微调器 例如 我有一个带有值的微调器和一个 确定 按钮 当用户单击 确定 按钮而不从微调器中选择任何值时 微调器会自行扩展 是否可以在无需用户与微调器交互的情况下获得扩展微调器的事件 只需致电Spinner
  • 如何检查 Android 设备是否在线

    我的服务器不断检查我的 Android 应用程序是否在线 请问我可以在我的android应用程序上执行哪些操作 创建一个名为 isNetworkAvailable 的帮助器方法 该方法将根据网络是否可用返回 true 或 false 它看起
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c
  • 改造将多个图像上传到单个密钥

    我正在使用 Retrofit 将图像上传到我的服务器 这里我需要为一个密钥上传多个图像 我已经尝试使用 Postman 网络客户端 它运行良好 这是一个屏幕截图 以下是请求的键值对 调查图像 文件1 文件2 文件3 属性图像 文件DRA j
  • RecyclerView 单击将数据传递到新活动

    我正在制作一个包含三个选项卡的应用程序 每个选项卡都有一个带有两个文本的 recyclerview 我希望用户能够单击任何 recyclerview 项目 并且该项目中的文本应传递到新活动 这是应用程序外观的图像 https i stack
  • Android 上的 SQLite JDBC 驱动程序

    我正在尝试使用xerial sqlite jdbc在 Android 中管理我的数据库没有成功 我得到了java lang NoClassDefFoundError org sqlite SQLiteConnection异常 我已经导入了这
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • Firebase 身份验证中是否需要 SMS Retriever API 才能进行 otp 自动填充?

    我在用Firebase auth api验证用户电话号码 目前 就我而言 我有一个屏幕 用户在其中输入电话号码 并在第二个屏幕上输入密码 根据文档firebase大多数时候自动检索 OTP 并启动验证过程 所以我的问题是它已经实现了SMS
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • java.lang.UnsatisfiedLinkError - android studio gradle 中的 NDK?

    文件夹结构 app main java jni Android mk Application mk hello jni c res 在构建 gradle apply plugin com android application androi
  • 以编程方式创建 FloatingActionButton(无需 xml)

    我很欣赏 Android 的 FloatingActionButton fab 功能 并希望在我的项目中的许多不同地方使用它们 现在 我有这样的东西 我有几个 xml 规范 除了 id 图标和 onclick 之外 所有这些规范都是相同的
  • Android:是否可以在可绘制选择器中使用字符串/枚举?

    问题 Q1 有人设法让自定义字符串 枚举属性在 xml 选择器中工作吗 我通过以下 1 获得了一个布尔属性 但不是字符串属性 编辑 感谢您的回答 目前 android 仅支持布尔选择器 原因请参阅已接受的答案 我计划实现一个复杂的自定义按钮
  • Recyclerview项目点击涟漪效果[重复]

    这个问题在这里已经有答案了 我正在尝试添加Ripple影响到RecyclerView的项目 我在网上查了一下 但找不到我需要的东西 我努力了android background归因于RecyclerView本身并将其设置为 android
  • PhoneGap Build Android 不显示闪屏

    这是我的 config xml 中与启动屏幕相关的代码

随机推荐

  • 允许更多 WebGL 上下文

    我目前正在开发一个包含项目列表的网站 每个项目都有一个缩略图 我使用以下方法为所有项目添加着色器效果PixiJS 问题是列表中的项目超过 16 个 因此我收到以下错误 警告 活动的 WebGL 上下文过多 最旧的上下文将丢失 有没有办法提高
  • 在 JavaScript 中创建多行字符串

    我在 Ruby 中有以下代码 我想把这段代码转换成 JavaScript JS 中的等效代码是什么 text lt lt HERE This Is A Multiline String HERE Update ECMAScript 6 ES
  • 如何在 Eclipse 中关闭 ViewPart?

    我在 Eclipse 中有一个视图 由一个扩展的类实现 org eclipse ui part ViewPart 我需要关闭它 我的意思是完全接近 而不仅仅是隐藏 我希望当用户 或我的代码 要求再次打开视图时创建一个新的 ViewPart
  • Cookie 总是过期的

    我正在设置一个 cookie HttpCookie cookie new HttpCookie simpleorder cookie Expires DateTime Now AddYears 1 cookie order carModel
  • 如何添加网络安全配置以在 Nougat 中启用 Charles 代理 SSL?

    我正在尝试启用Charles Proxy我的 SSLSamsung s8运行于Android Nougat但不知道该怎么做 Before Nougat我能够成功记录我的设备上多个应用程序的查尔斯会话 已关注this and this设置一切
  • 类型错误:Firebase 不是函数

    我正在尝试遵循 firebase Node 教程 https www firebase com docs web quickstart html 我的 node js 应用程序因 TypeError Firebase 不是函数 错误而崩溃
  • C++11 可以判断 std::thread 是否处于活动状态吗?

    令我惊讶的是 一个已完成执行但尚未加入的 C 11 std thread 对象仍然是经过考虑的活动的执行线程 以下代码示例对此进行了说明 在 Xubuntu 13 03 上使用 g 4 7 3 构建 有谁知道 C 11 标准是否提供了一种方
  • MVC DropDownListFor Null 值

    我在 MVC 中使用 htmlhelper 的下拉列表时遇到问题 当回发发生时 没有选择任何内容 并且列表模型中的值和所选项目为空 这是我的模型 namespace MvcTestWebApp Models public class Cus
  • 使用“for”循环对包含数字的数组进行排序

    我是 JavaScript 新手 我有一个包含数字的数组 var arr 2 4 8 1 5 9 3 7 6 我如何使用本地人对其进行排序for loop在 JavaScript 中 我知道排序功能可用 但我希望它通过for loop 输出
  • 如果出现错误,如何使用 try...catch 并让我的脚本停止?

    我试图让我的脚本在遇到错误时停止 并使用 try catch 为我提供一种简单的方法来处理错误 我本以为这是世界上最简单的事情 但我显然在做一些愚蠢的事情 我读了几个小时 但我被困住了 任何帮助都会非常方便 谢谢 这是一些示例代码 我把错误
  • CSS 框上的斜角[重复]

    这个问题在这里已经有答案了 我使用 CSS 的时间很短 我正在尝试制作一个普通的盒子 但左上角以 45 度角切掉 数额也不小 我正在看那个角度的一个相当大的切角 这个效果 我该怎么办 描述 倾斜 http meyerweb com eric
  • Swift 协议继承和通用函数

    考虑以下游乐场 import Foundation protocol StringInitable init string String class A StringInitable var stored String required i
  • 如何在 Apache Spark 中获取上一行的数据

    从 Spark Data 框架中查找每个城市上个月的销售情况 City Month Sale c1 JAN 2017 49 c1 FEB 2017 46 c1 MAR 2017 83 c2 JAN 2017 59 c2 MAY 2017 6
  • ServiceStack没有服务器端异步支持

    我的一个朋友告诉我他过去看过 ServiceStack 说它看起来不错 但没有异步支持 所以在他的书中 它不是使用这个框架的选项 如果没有异步就不好 我必须同意 除非ServiceStack添加了异步 否则不确定这对我来说是否是一个不错的选
  • 使用 Async 和 Await 的 ASP.NET C#5 异步 Web 应用程序

    研究了异步 Web 开发的概念 特别是来自this来源 我创建了一个示例应用程序来证明这个概念 该解决方案由 2 个 ASP NET Web API 应用程序组成 第一个是模拟的慢端点 它等待 1000 毫秒 然后返回一个名为 Studen
  • 突出显示 HTML 文本中的单词(但不是标记)

    我试图突出显示正文内的所有匹配单词 但不突出显示任何 html 标记内的单词 例如 给出的关键字是 para 这是该段落 p class para Example of paragraph Lorem ipsum dolor sit ame
  • 课程末尾的美元符号在 Eclipse MAT 中意味着什么?

    我正在使用 Eclipse MAT 尝试追踪 Android 中的资源泄漏 如果您经常更改屏幕方向 当我转到直方图视图时 我看到我的活动与一次又一次列出的相同活动一起列出 并带有 在它之后 So like com test TestActi
  • 将“rlang”准引用与“dplyr::_join”函数一起使用

    我正在尝试编写一个我使用的自定义函数rlang的准引用 该函数内部也使用dplyr s join功能 我在下面提供了一个最小的工作示例来说明我的问题 needed libraries library tidyverse function d
  • 打印 html 文档时所有页面中的 HTML 页眉和页脚

    我创建了一个带有页眉 一些内容和页脚的 html 页面 我尝试打印 HTML 页面 结果有 2 页 我在第一页得到了页眉 在最后一页得到了页脚 我真正需要的是在所有页面中显示页眉和页脚 就像在 Word 文档中一样 我查了一下 发现使用th
  • 如何使用 Android 数据绑定动态更改视图可见性

    我正在尝试使用数据绑定实现一种简单的视图隐藏 显示 我有一个 api 调用 并且在 api 调用正在进行时我必须显示一个进度条 一旦我收到响应 就必须忽略此进度并显示数据 我尝试使用数据绑定动态更改进度条的可见性 但什么也没发生 仅在第一次