为了账号安全,请及时绑定邮箱和手机立即绑定

带有 BindingAdapter 的 MutableLiveData 不更新视图的可见性

带有 BindingAdapter 的 MutableLiveData 不更新视图的可见性

饮歌长啸 2022-11-10 16:41:35
即使我多次更新 LiveData,我的 BindingAdapter 也只运行一次。public class ButtonViewBindingAdapter{    @BindingAdapter("hideIfZero")    public static void setHideIfZero(View view, MutableLiveData<Integer> currentPosition)    {        view.setVisibility(currentPosition.getValue() == 0 ? View.GONE : View.VISIBLE);    }}<layout xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:app="http://schemas.android.com/apk/res-auto">    <data>        <variable            name="viewModel"            type="com.package.PermissionsViewModel"/>        <variable            name="clickHandler"            type="com.package.PermissionsActivity.ClickHandler"/>    </data>    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <Button            android:id="@+id/buttonNext"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_alignParentBottom="true"            android:background="@null"            android:onClick="@{() -> clickHandler.nextSlide()}"            android:text="@string/intro_next"            android:textColor="@android:color/white"            />        <Button            android:id="@+id/buttonBack"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_alignParentBottom="true"            android:background="@null"            android:onClick="@{() -> clickHandler.previousSlide()}"            android:text="@string/intro_back"            android:textColor="@android:color/white"            app:hideIfZero="@{viewModel.currentSlidePosition}"/>    </RelativeLayout></layout>当我更新视图模型中的值时,可见性仍然没有改变。BindingAdapter 不会多次运行。我在这里想念什么?我希望它在位置为 0 时隐藏,否则它应该显示。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

如果您未能调用setLifecycleOwner()绑定对象,数据绑定仍然有效,但无法获得任何更新。IIRC,您在绑定时获得了初始值LiveData,但之后就没有了。

我刚刚提交了一个功能请求,以让数据绑定在您未能调用时更明显地抱怨setLifecycleOwner()


查看完整回答
反对 回复 2022-11-10
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

例子:

binding.lifecycleOwner = this

这是片段/活动等。


查看完整回答
反对 回复 2022-11-10
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信