gpt4 book ai didi

java - 安卓 BottomSheetBehavior setState() NullPointerException

转载 作者:太空狗 更新时间:2023-10-29 16:00:25 24 4
gpt4 key购买 nike

我正在尝试从 Android 支持设计库中实现 BottomSheetBehavior。我像这样初始化 BottomSheetBehavior:

private void initBottomSheet() {
new AsyncTask<Void, Void, Void>() {

View bottomSheetFrame = rootView.findViewById(R.id.bottom_sheet);

}

@Override
protected Void doInBackground(Void... params) {
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetFrame);

bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
private boolean isOnTop = false;

@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch (newState) {

case BottomSheetBehavior.STATE_DRAGGING: {
...
}

case BottomSheetBehavior.STATE_SETTLING: {
...
}

case BottomSheetBehavior.STATE_EXPANDED: {
...
}

case BottomSheetBehavior.STATE_COLLAPSED: {
...
}

case BottomSheetBehavior.STATE_HIDDEN: {
...
}

default: {
break;
}
}
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
...
});

bottomSheetBehavior.setPeekHeight((int) Utils.convertDpToPixel(100f, activityContext));
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); // NPE here

return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}.execute();
}

这很奇怪,因为我可以通过点击 Button 或其他一些 Action 来改变状态。请帮帮我。

最佳答案

问题

NPE 的发生是因为您在布局 View 之前调用了 BottomSheetBehavior.setState(...)bottomSheetFrame。此时 BottomSheetBehavior 对 View 有 null 引用,无法将您的状态应用到它。

解决方案

我使用 View.post(Runnable) 方法解决了这个问题:

View sheetView = ... ;    
BottomSheetBehavior behavior = BottomSheetBehavior.from(sheetView);
int initState = BottomSheetBehavior.STATE_EXPANDED;

sheetView.post(new Runnable() {
@Override
public void run() {
behavior.setState(initState);
}
});

在我的情况下,这有助于阻止 NPE-s :)

关于java - 安卓 BottomSheetBehavior setState() NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com