【问题标题】:App crashes on hiding ActionBar? [closed]隐藏 ActionBar 时应用程序崩溃? [关闭]
【发布时间】:2015-07-01 03:29:47
【问题描述】:

我有一个Button,点击它时calls 函数hide_bar()

public void hide_bar(View v){
        ActionBar ab = getActionBar();
        ab.hide();
    }

但不是隐藏操作栏,而是使应用程序崩溃

如何修复这个错误?

FATAL EXCEPTION: main Process: com.example.prateek.myapp, PID: 19919 java.lang.IllegalStateException: Could not execute method of the activity Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.hide()' on a null object reference 

更新(问题已修复):

我无法使用 getActionBar(),因为我的 manifest 文件定义了您必须使用 getSupportActionBar()AppCompat 主题

将清单文件中的主题替换为Theme.Holo.Light 后,我可以使用getActionBar() 方法。

【问题讨论】:

  • 你能把logcat的错误贴出来
  • 请发布堆栈跟踪。
  • 致命异常:主进程:com.example.prateek.myapp,PID:19919 java.lang.IllegalStateException:无法执行活动的方法原因:java.lang.NullPointerException:尝试调用空对象引用上的虚拟方法“void android.app.ActionBar.hide()”
  • 请展示你的全班同学。

标签: android android-activity android-actionbar


【解决方案1】:

当您扩展 ActionBarActivity 时,您需要通过调用获取 actionBar

actionBar=getSupportActionBar();

【讨论】:

  • 它有效,但我应该扩展哪个类以便我可以使用 ActionBar ab= getActionBar();
  • 如果您的应用支持 API 级别 3.0 (HoneyComb) 及更高级别,您可以扩展 Activity 并使用 getActionBar();..
  • 我试过了,但即便如此我的应用还是崩溃了。
  • 上面提到的同一个异常(NullPointerException)。 java.lang.IllegalStateException:无法在 android.view.View$1.onClick(View.java:4012) 处执行活动的方法
  • 粘贴整个Activity class..给我一个链接
【解决方案2】:

您需要知道您的应用程序使用什么操作栏来调用正确的方法来获取操作栏。 此外,您的例外是 NPE,因此您需要在使用之前检查变量的值。

请参考以下代码:

public void hide_bar(View v){
    ActionBar ab = getActionBar();
    if (ab != null)
      ab.hide();
    else {
      ab = getSupportActionBar();
      if (ab != null) ab.hide();
    }
}

【讨论】:

  • 你不觉得他在扩展ActionBarActivity这里ActionBar ab = getActionBar();总是会返回null
  • 我记不太清了,但如果你和编辑坐在一起,不难找到正确的答案:)
【解决方案3】:

你可以这样做,

ActionBar ab;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ab = getActionBar();
    }

    public void hide_bar(View v){
           ab.hide();
    }

【讨论】:

  • 如果您的课程正在扩展ActionBarActivity,您不认为getActionBar 会返回null
【解决方案4】:

您需要在调用 hide() 之前调用 setSystemUiVisibilty() 并设置 UI 标志。

隐藏操作栏的实际代码sn-p是这样的:

View decorView = getWindow().getDecorView();  int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions);  ActionBar actionBar = getActionBar(); actionBar.hide();

取自 developer.android.com

详情请咨询https://developer.android.com/training/system-ui/status.html#41

【讨论】:

  • 用户不需要隐藏状态栏。
  • 你的代码总是返回 null actionBar,因为他正在扩展 ActionBarActivity
  • 是的,Bharath,我刚才看到了这堂课。我回答的时候没有提到。这个问题非常模棱两可,当时没有任何适当的细节,所以我只能写这些。
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多