我正在使用带谷歌地图的BottomSheet来解决这个问题。
当我对任何标记进行抄袭时,我会显示BottomSheet。
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
return false;
}
});
我在地图上的某处点击时隐藏它。
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng arg0) {
// TODO Auto-generated method stub
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
});
但是一旦我点击地图,并希望它隐藏,我的应用程序崩溃时出现以下错误
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)
我发现state 5
是针对BottomSheet的隐藏行为,但我无法理解为什么会崩溃以及如何修复它。
答案 0 :(得分:1)
我也遇到了同样的问题,我发现这是因为我将底页的可隐藏行为设置为false。
因此,请确保将
app:behavior_hideable="true"
属性添加到您的 底页布局
或者,如果您打算使底页不能被用户自己隐藏,而只能通过编程方式进行隐藏,则在像这样将其隐藏之前,只需调用bottomSheetBehaviour.setHideable(true)即可:
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng arg0) {
mBottomSheetBehavior.setHideable(true);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
});
答案 1 :(得分:0)
你应该添加
if(BottomSheetBehavior.STATE_COLLAPSED){
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}