【问题标题】:data binding to list size is not working?数据绑定到列表大小不起作用?
【发布时间】:2018-10-09 18:53:03
【问题描述】:

我有一个 android 应用程序,如果 List 为空,它会向用户显示一个屏幕以输入数据,否则它会在 recyclerview 中显示 List。

当应用第一次启动时,它工作正常。必须从在线数据库中读取数据,以便显示空列表文本,直到加载数据并显示列表。如果我使用应用程序从数据库中删除条目,则列表大小变为零,但未显示空列表,Recyclerview 仍然可见(但由于列表为空,所以为空。

空文本视图的绑定是:

android:visibility="@{list.size() == 0 ? View.VISIBLE : View.GONE}"

对于回收站视图是:

android:visibility="@{list.size() == 0 ? View.GONE : View.VISIBLE}"

列表使用以下方式绑定:

binding.setList(mList) ;

正如我所说的应用程序的启动工作,所以我不明白为什么让列表变空也不起作用。

任何指针将不胜感激。

【问题讨论】:

  • 您每次更改列表后都会调用binding.setList(mList)吗?
  • 由于您没有在 xml android:visibility="@{list.size() == 0 ? View.GONE : View.VISIBLE}" 中使用 Observable 对象,因此您需要在每次更新列表时调用 binding.setList(mList) ;(当您第一次从服务器获取以及删除项目时) .
  • 是的,我在更新列表时调用 binding.setList(mList)。

标签: android data-binding


【解决方案1】:

从数据库中删除项目后,您似乎没有触发“绑定更新”。不管怎样,你可以用不同的方法来处理它,比如说 LiveData<Boolean>ObservableBoolean 会说无论列表是否为空,你的绑定表达式都不会改变。

使用 LiveDataObservable<T>with dataBinding 的优点是每次更改这些值时,它都会自动“传播”到视图 - 所以您不需要在每次视图更新时都这样做 binding.setList(mList); .还有ObservableArrayList,绑定它而不是常规的List 也可以工作,但我还没有尝试过。

see using observables with databinding

顺便说一句,如果您将LiveData 放入ViewModel 并从xml 绑定到那个,那么LiveData + 数据绑定的效果会更好。

【讨论】:

  • 谢谢,但我现在不想更改我的应用程序以使用 LiveData。
  • 它让生活更轻松
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多