我正在尝试从Android支持设计库中实现BottomSheetBegonor
。我像这样初始化BottomSheetBeAct or
:
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();
}
这很奇怪,因为我可以通过点击按钮或其他动作来改变状态。请帮帮我。
如果您在Fraank
中使用它,请务必在onCreateView()
方法上调用它。如果您在Active
上使用它,则在onCreate()
方法上调用它。
在这种情况下,您的视图必须已经创建,除非您以编程方式创建它们。
由于您是从一个异步任务调用与UI相关的方法,因此您需要用runOnUiThread将其包围起来,如本文所述https://stackoverflow.com/a/27992603/973919
基本上,您需要从应用程序的主线程(即UI线程)调用与视图相关的任何内容。
问题
NPE之所以发生,是因为您调用了BottomSheetBehavior。设置状态(…)
在您的视图之前-底部框架
。此时,BottomSheetBehavior在视图上具有null引用,无法将您的状态应用于它。
溶液
我通过使用视图解决了这个问题。post(可运行)方法:
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:)
问题内容: 我有以下活动: 我得到一个NPE,当我尝试调用的,我猜这是因为是一个独立的片段,我有作为之内: 但是,我不确定如何解决此问题,以便可以找到loginButton ID。我以前没有使用过片段,所以我意识到我可能正在使用它们/错误地实现了它们。包含在几个按钮,并没有什么,但一个。 问题答案: 从片段编写代码以初始化按钮,因为您的按钮进入片段布局而不是活动布局。 而从删除登录按钮相关的代码的
问题内容: 我刚刚开始学习Java,并且只知道少量的代码,但是,这仍然是一个简单的程序。它更多是一个恶作剧程序,但主要只是为了测试我是否可以创建一个jar文件。 这是代码: 我将其保存到名为的文件中,然后使用进行编译 这有效,当我使用运行它时 它也可以正常工作。 因此,然后我尝试创建一个jar文件。我使用命令 而且有效。之后,我双击jar文件,它出现一个错误。 所以我在cmd中运行它 并得到这个错
问题内容: 我点击超级链接后有一个操作网址 在我的方法中,我有以下代码 我在表演的时候就在表演。即使正确打印为。 类: 为什么会这样呢? 问题答案: 该未初始化。您应该在操作中以某种方式对其进行初始化 更好的方法是让容器为您完成。您只需要在 那你就会有 而且您不需要解析参数请求,拦截器已经完成了此操作,这是您的操作应运行的一部分。您应该在操作中创建属性以保存参数值。 动作看起来像
问题内容: 我是Java的新手。 我有以下问题:方法或者,等抛出异常:。 我使用NetBeans IDE(如果有关系)。 问题答案: 某些IDE不提供控制台。请注意,在这些情况下会返回。 来自文献 返回值: 系统控制台(如果有),否则为null。 您可以始终使用和代替,如下所示:
问题内容: 下面的程序引发NullPointerException。在Log cat中,它显示: 单击该按钮时,它不会进入Mousefragment类。我试图解决它,但是我不能-如何解决这个问题? 编辑 单击该按钮多少次,该异常随同invalid_ip Toast消息一起显示 问题答案: 如前所述,您的问题询问如何解决此问题。 您需要弄清楚在哪里抛出。为此,请查看堆栈跟踪以查看引起问题的行。然后,
问题内容: 我正在开发Java代理。我有一个NullPointerException错误,我认为应该不会发生。 这是调试控制台消息: 这是Java代理中的代码 基本上,错误指向。 事实是,URL是有效的链接,因为我已经通过在浏览器中进行访问尝试了它。 此错误的可能原因是什么?在我创建用于测试的本地Notes数据库上,它的效果不佳。但是,在注释中未开发的普通Java程序中,它可以工作。 问题答案:
问题内容: 我有以下代码,试图在ListView中创建一个简单的ListAdapter(我之前曾使用过此代码,这是我更改过的唯一地方): 逐步执行时,什么都没有发生,但是在运行时,我得到NullPointerExceptionin ChoreoGrapher.doCallbacks,当我创建一个empty时ArrayList,它不会崩溃: 是什么ChoreoGrapher,为什么会导致我的应用崩溃
问题内容: 我有以下代码,尝试在ListView中创建一个简单的ListAdapter(我之前曾使用过此代码,这是我唯一更改过的地方): 逐步执行时,什么也没有发生,但是在运行时,我得到了in ,当我创建一个empty时,它不会崩溃: 是什么,为什么会导致我的应用程序崩溃? 我完全停留在可能出问题的地方,或者如何找出问题所在。Eclipse调试器或崩溃信息并没有真正帮助。 整个堆栈跟踪如下: 我也