当前位置: 首页 > 知识库问答 >
问题:

Android BottomSheetBehavior setState()NullPointerException

孟浩然
2023-03-14

我正在尝试从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();
    }

这很奇怪,因为我可以通过点击按钮或其他动作来改变状态。请帮帮我。

共有2个答案

阎佑运
2023-03-14

如果您在Fraank中使用它,请务必在onCreateView()方法上调用它。如果您在Active上使用它,则在onCreate()方法上调用它。

在这种情况下,您的视图必须已经创建,除非您以编程方式创建它们。

由于您是从一个异步任务调用与UI相关的方法,因此您需要用runOnUiThread将其包围起来,如本文所述https://stackoverflow.com/a/27992603/973919

基本上,您需要从应用程序的主线程(即UI线程)调用与视图相关的任何内容。

裴昊阳
2023-03-14

问题

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调试器或崩溃信息并没有真正帮助。 整个堆栈跟踪如下: 我也