有人能解释一下什么时候会发生这种异常吗?
12-18 11:20:07.225 15944-15944/com.test.dev.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dev.debug, PID: 15944
java.lang.IllegalArgumentException: Illegal state argument: 5
at android.support.design.widget.BottomSheetBehavior.startSettlingAnimation(BottomSheetBehavior.java:631)
at android.support.design.widget.BottomSheetBehavior$1.run(BottomSheetBehavior.java:550)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)Java类
public class BottomSheetController {
private BottomSheetBehavior<View> bottomSheetBehavior;
private WeakReference<FrameLayout> bottomSheetContainer;
private Slide slide;
public interface Slide {
void onSlide(@NonNull View bottomSheet, float slideOffset);
}
public void bind(FrameLayout bottomSheetContainer) {
this.bottomSheetContainer = new WeakReference<>(bottomSheetContainer);
bottomSheetBehavior = BottomSheetBehavior.from(this.bottomSheetContainer.get());
bottomSheetBehavior.setHideable(true);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
bottomSheetBehavior.setBottomSheetCallback(sheetCallback());
}
public void unbind() {
this.bottomSheetContainer.clear();
}
public void setSlide(Slide slide) {
this.slide = slide;
}
public void collapse() {
bottomSheetBehavior.setHideable(true);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
public void expand() {
bottomSheetBehavior.setHideable(false);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
public void hide() {
bottomSheetBehavior.setHideable(true);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
public int getState() {
return bottomSheetBehavior.getState();
}
private BottomSheetBehavior.BottomSheetCallback sheetCallback() {
return new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState != BottomSheetBehavior.STATE_HIDDEN) {
bottomSheetBehavior.setHideable(false);
} else {
bottomSheetBehavior.setHideable(true);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
if (slide != null) {
slide.onSlide(bottomSheet, slideOffset);
}
}
};
}
}发布于 2017-12-18 15:33:57
public class IllegalArgumentException extends RuntimeException抛出以指示方法已被传递给非法或不适当的参数。
在代码中的某个地方,您正在向方法startSettlingAnimation() (BottomSheetBehavior类)传递一个非法参数。此方法正在引发异常:
void startSettlingAnimation(View child, int state) {
int top;
if (state == STATE_COLLAPSED) {
top = mCollapsedOffset;
} else if (state == STATE_HALF_EXPANDED) {
top = mHalfExpandedOffset;
} else if (state == STATE_EXPANDED) {
top = getExpandedOffset();
} else if (mHideable && state == STATE_HIDDEN) {
top = mParentHeight;
} else {
throw new IllegalArgumentException("Illegal state argument: " + state);
}
if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
setStateInternal(STATE_SETTLING);
ViewCompat.postOnAnimation(child, new SettleRunnable(child, state));
} else {
setStateInternal(state);
}
}您的错误是:Illegal state argument: 5。5是STATE_HIDDEN的int值。因此,当您的状态为STATE_HIDDEN (5)时,您的mHideable布尔值为false。因此,基本建议是设置mHideable = true;
没有任何密码,我只能告诉你这么多。
发布于 2020-01-26 09:31:43
对我来说,问题是由sheetBehavior.setHideable(true);解决的,当setHideable为false时,然后将状态设置为BottomSheetBehavior.STATE_HIDDEN异常。
发布于 2020-12-19 10:19:57
正如@Serj Ardovic所解释的,这是一个可征服的世界。
我想补充的是,您也可以将它放在xml中:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_hideable="true" <- this here
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">https://stackoverflow.com/questions/47871555
复制相似问题