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

即使我多次更新 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 时隐藏,否则它应该显示。


饮歌长啸
浏览 247回答 2
2回答

心有法竹

如果您未能调用setLifecycleOwner()绑定对象,数据绑定仍然有效,但无法获得任何更新。IIRC,您在绑定时获得了初始值LiveData,但之后就没有了。我刚刚提交了一个功能请求,以让数据绑定在您未能调用时更明显地抱怨setLifecycleOwner()。

慕田峪4524236

例子:binding.lifecycleOwner&nbsp;=&nbsp;this这是片段/活动等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java