android - IllegalArgumentException - 状态参数 : 5 on BottomSheet

标签 android android-activity illegalargumentexception bottom-sheet

我在使用 BottomSheet 和 GoogleMap 时遇到了这个问题。

当点击任何标记时,我会显示 BottomSheet。

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            return false;
        }
    });

当我点击 map 上的某个地方时,我会隐藏它。

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

        @Override
        public void onMapClick(LatLng arg0) {
            // TODO Auto-generated method stub
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

        }
    });

但是一旦我单击 map 并期望它隐藏,我的应用程序就会崩溃并出现以下错误

java.lang.IllegalArgumentException: Illegal state argument: 5
 at android.support.design.widget.BottomSheetBehavior.startSettlingAnimation(BottomSheetBehavior.java:629)
 at android.support.design.widget.BottomSheetBehavior.setState(BottomSheetBehavior.java:552)
 at app.iwiz.windrock.activities.HomeNavigationActivity$3.onMapClick(HomeNavigationActivity.java:278)
 at com.google.android.gms.maps.GoogleMap$23.onMapClick(Unknown Source)
 at com.google.android.gms.maps.internal.zzq$zza.onTransact(Unknown Source)
 at android.os.Binder.transact(Binder.java:507)
 at er.b(:com.google.android.gms.DynamiteModulesB@11975448:20)
 at com.google.android.gms.maps.internal.ay.a(:com.google.android.gms.DynamiteModulesB@11975448:5)
 at com.google.maps.api.android.lib6.gmm6.vector.af.c(:com.google.android.gms.DynamiteModulesB@11975448:212)
 at com.google.maps.api.android.lib6.gmm6.vector.cr.onSingleTapConfirmed(:com.google.android.gms.DynamiteModulesB@11975448:28)
 at com.google.maps.api.android.lib6.impl.gesture.h.onSingleTapConfirmed(:com.google.android.gms.DynamiteModulesB@11975448:124)
 at com.google.maps.api.android.lib6.impl.gesture.d.handleMessage(:com.google.android.gms.DynamiteModulesB@11975448:26)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6692)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

我发现状态5用于BottomSheet的隐藏行为,但我无法理解它为什么崩溃以及如何修复它。

最佳答案

我也遇到了同样的问题,我发现这是因为我将 Bottom Sheet 的隐藏行为设置为 false。

SO, Make sure you add app:behavior_hideable="true" attribute to your bottom sheet layout

或者,如果您打算使 Bottom Sheet 不能被用户本身隐藏,而只能通过编程方式隐藏,只需在隐藏它之前调用bottomSheetBehaviour.setHideable(true),如下所示:

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

    @Override
    public void onMapClick(LatLng arg0) {
         mBottomSheetBehavior.setHideable(true);
         mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

    }
});

关于android - IllegalArgumentException - 状态参数 : 5 on BottomSheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617628/

相关文章:

android - IllegalArgumentException - WindowManagerGlobal.java

android - 设备管理器找不到 Android 调试 USB 连接

android - ViewBinding - 不同风格的布局资源

java - android studio 中的第一个应用程序,R 类

AndroidStudio 使用 Dagger2 构建 : java. lang.IllegalArgumentException : . .. 无法表示为 Class<?>

android - YouTube API v3示例IllegalArgumentException,Android Studio

android - 通过单击按钮直接发送电子邮件 android

android - Android SDK 中缺少 AAPT2

java - 跨 Activity 预加载 AdMob 插页式广告

java - Android 应用程序问题 - 如何在 Play 商店中加载应用程序条目