2
이 예외가 발생할 때 누군가 설명 할 수 있습니까?BottomSheetBehavior 잘못된 상태 인수 : 5
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)
방법은 불법 또는 부적절한 인수가 전달되었음을 나타냅니다 자바 클래스
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);
}
}
};
}
}
제 컨트롤러 클래스를 추가했습니다. –
나는 'bottomSheetBehavior.setHideable (true);'부분이 어떤 이유로 든 당신의'bind()'메쏘드 안에서 호출되지 않는다는 것이 문제라고 생각한다. 브레이크 포인트로 앱을 디버깅 해보세요. –
테스트 팀은 원숭이 테스트를 실행 중이므로 디버깅하기가 어렵습니다. 하지만 문제는 여기에 있다고 생각합니다 : 'public void onStateChanged (@NonNull view bottomSheet, int newState)' –