web-dev-qa-db-ja.com

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)

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);
                }
            }
        };
    }
}
11
Anderson K
_public class IllegalArgumentException extends RuntimeException
_

メソッドに違法または不適切な引数が渡されたことを示すためにスローされます。

コードのどこかで、メソッドstartSettlingAnimation()BottomSheetBehavior class)に不正な引数を渡しています。このメソッドは例外をスローしています:

_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を設定;

コードがなければ、それは私があなたに言うことができる限りです。

13
Serj Ardovic

私の場合、問題はsheetBehavior.setHideable(true);によって解決されました。setHideableがtrueの場合、状態をBottomSheetBehavior.STATE_HIDDEN例外に設定すると例外が発生するようです。

0
v.d