gpt4 book ai didi

java - 带有 BindingAdapter 的 MutableLiveData 不更新 View 的可见性

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:58 26 4
gpt4 key购买 nike

即使我多次更新 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>

public class PermissionsViewModel extends ViewModel
{
private MutableLiveData<Integer> currentSlidePosition = new MutableLiveData<>();

public PermissionsViewModel()
{
currentSlidePosition.setValue(0);
}

public void setCurrentSlidePosition(final int position)
{
currentSlidePosition.setValue(position);
}

public MutableLiveData<Integer> getCurrentSlidePosition()
{
return currentSlidePosition;
}
}

当我更新 View 模型中的值时,可见性仍然没有改变。 BindingAdapter 不会运行多次。我在这里错过了什么?我希望它在位置为 0 时隐藏,否则它应该显示。

最佳答案

如果您在绑定(bind)对象上调用 setLifecycleOwner() 失败,数据绑定(bind)仍然有效,但安静地无法获得任何更新。 IIRC,您在绑定(bind)时获得了保存在 LiveData 中的初始值,但之后什么都没有。

我刚刚提交了 a feature request如果您未能调用 setLifecycleOwner(),让数据绑定(bind)更明显地提示。

关于java - 带有 BindingAdapter 的 MutableLiveData 不更新 View 的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com