如何将ViewModel绑定到BottomSheet

3

我正在尝试找出如何将viewmodel绑定到bottomsheet的方法,以便我可以使用viewmodel上的可观察字段来扩展、折叠和隐藏bottomsheet。

谢谢!

1个回答

7

您应该使用自定义BindingAdapter

@BindingAdapter("bottomSheetBehaviorState")
public static void setState(View v, int bottomSheetBehaviorState) {
    BottomSheetBehavior<View> viewBottomSheetBehavior = BottomSheetBehavior.from(v);
    viewBottomSheetBehavior.setState(bottomSheetBehaviorState);
}

将其绑定到视图的xml中:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">  
(...)
        <android.support.v4.widget.NestedScrollView
            android:id="@+id/group_bottom_sheet"
            bottomSheetBehaviorState="@{viewModel.bottomSheetBehaviorState}"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:background="@android:color/holo_blue_bright"
            app:behavior_hideable="true"
            app:behavior_peekHeight="50dp"
            app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/>


(...)
</layout>

并在ViewModel中更改状态。以下是来自我的ViewModel的相关代码:

public final ObservableInt bottomSheetBehaviorState = new ObservableInt(BottomSheetBehavior.STATE_HIDDEN);


@Override
public void onAction(boolean show){
    bottomSheetBehaviorState.set(show? BottomSheetBehavior.STATE_COLLAPSED : BottomSheetBehavior.STATE_HIDDEN);
}

谢谢。我会尝试并回报/更新任何其他发现。也在尝试更新peekheight。bottomsheetbehaviorstate的命名空间是什么? - dazza5000
所有状态都在这里:https://developer.android.com/reference/android/support/design/widget/BottomSheetBehavior.html#STATE_COLLAPSED - Kriczer
命名空间,如app/android/ app:behavior_hideable android:id等...在nestedscrollview元素中定义的bottomSheetBehaviorState属性没有命名空间。 - dazza5000
1
这个属性不需要命名空间。 - Kriczer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接