有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序在试图更改重新加载的片段中的FloatingActionButton的状态时不断崩溃

我正在开发的应用程序中有一些片段。默认片段是HomeFragment。当活动重新启动时,我根据方法decideDisable()的结果成功地将HomeFragment中的FloatingActionButton的状态设置为setEnabled(true)setEnabled(false)。但是,当我使用导航抽屉导航到MyAccountFragment或任何其他片段,并尝试返回到主片段时,应用程序崩溃,出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.accessopthalmics.accessophthalmics, PID: 18211
              java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.support.design.widget.FloatingActionButton.setEnabled(boolean)' on a null object reference
                  at com.app.Main2Activity.decideDisable(Main2Activity.java:333)
                  at com.app.Main2Activity$1.onNavigationItemSelected(Main2Activity.java:132)
                  at 安卓.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:154)
                  at 安卓.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
                  at 安卓.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
                  at 安卓.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
                  at 安卓.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:342)
                  at 安卓.view.View.performClick(View.java:5210)
                  at 安卓.view.View$PerformClick.run(View.java:21183)
                  at 安卓.os.Handler.handleCallback(Handler.java:739)
                  at 安卓.os.Handler.dispatchMessage(Handler.java:95)
                  at 安卓.os.Looper.loop(Looper.java:148)
                  at 安卓.app.ActivityThread.main(ActivityThread.java:5452)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
                  at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:652)

我使用以下代码设置HomeFragment

            HomeFragment homeFragment = new HomeFragment();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_frame, homeFragment, "home");
            ft.addToBackStack(null);
            ft.commit();
            return homeFragment;

请注意,每次将HomeFragment加载到视图中时,我都必须对decideDisable()进行一次重要检查


共 (1) 个答案

  1. # 1 楼答案

    发生此错误是因为当您再次进入该片段时,您的浮动按钮未初始化。但你可以做以下事情来解决你的问题

      @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            if (isVisibleToUser) {
       do floating button find view by Id here
    
                // Do your Work
            } else {
                // Do your Work
            }
        }