【发布时间】:2016-03-14 21:09:57
【问题描述】:
我正在尝试从 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 click 或其他一些动作来改变状态。请帮帮我。
【问题讨论】:
-
去掉这一行 View bottomSheetFrame = rootView.findViewById(R.id.bottom_sheet);在异步任务之外,并在 onCreate 方法中找到视图。此外,如果您要更新视图,您应该在 onPostExecute 方法中执行。
-
@AgustinSivoplás,非常感谢。我没有注意到方法是从
doInBackground()调用的。
标签: java android nullpointerexception android-support-library android-design-library