BindingAdapterとMutableLiveDataは、ビューの表示を更新しません

Nilsi:

私は私の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;
    }
}

私は私のviewmodelに値を更新すると、視認性はまだ変更されません。BindingAdapterは複数回実行されません。私はここで何をしないのですか?私は、位置は0、それ以外の場合は表示する必要がありますときに、それは非表示にしたいです。

CommonsWare:

あなたが呼び出すために失敗した場合setLifecycleOwner()バインディングオブジェクトに、データがまだ結合は動作しますが、静かにすべての更新の取得に失敗しました。IIRC、あなたは初期で開催された値を得るLiveData結合時に、それの後に何を。

私は、提出された機能の要求より多くの目に見えますが、呼び出しに失敗した場合文句をデータバインディングを取得するためにsetLifecycleOwner()

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=199312&siteId=1