【问题标题】:android getSupportActionBar() returns null in fragmentandroid getSupportActionBar() 在片段中返回 null
【发布时间】:2015-05-21 07:24:45
【问题描述】:

更新

我没有提到任何关于使用 ToolBarActionBarActivity 的内容。这就是我总是得到空指针异常的原因。对于那些面临同样问题的人please refere this answer


我有这个片段代码来更改片段更改时支持操作栏的外观。

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
        mActionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();
        SpannableString s = new SpannableString("Dashboard");
        s.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.app_blue_text)), 0, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        s.setSpan(new TypefaceSpan(getActivity(), "Optima-Regular.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        if( null!= mActionBar){
            mActionBar.setElevation(0);
            mActionBar.setTitle(s);
        }
    }

我已经提到过有关如何解决此错误的先前/类似问题。这些解决方案建议在onActivityCreated() 方法中更改操作栏的外观。我也试过onAttach()。似乎没有一个工作。我使用支持操作栏来保持向后兼容性。 Activity 也相应地转换为 ActionBarActivity

完整的代码很长,所以我跳过了发布它。如果需要,我可以发布完整的代码并更新问题以及更多详细信息。

错误日志

Caused by: java.lang.NullPointerException
            at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215) 

第 215 行是:mActionBar.setElevation(0);

【问题讨论】:

  • 你的问题到底是什么?
  • @hrskrs 检查标题
  • 我也添加了错误日志。
  • 你是导入import android.app.ActionBar还是import android.support.v4.app.actionbar?
  • @Fahim 我用过android.support.v7.app.ActionBar;

标签: android android-fragments android-actionbar android-appcompat android-actionbar-compat


【解决方案1】:

我错过了在这个问题中提及更多信息。这就是其他优秀的 SO 用户无法正确回答的原因。所以在这里我自己回答。

我用ToolBar 代替了普通的ActionBar。当您使用ToolBar 时,您必须将其设置为ActionBar。所以通过这样做 -

toolbar = (Toolbar) getActivity().findViewById(toolbarId);
((ActionBarActivity)getActivity()).setSupportActionBar(toolbar);

然后我可以通过 - 轻松更改标题和外观

((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s);

只记得在片段中实际使用actionbar之前将toolbar设置为actionbar。

【讨论】:

  • 我这几天一直在寻找这个问题。谢谢! IT 解决了我的问题
【解决方案2】:

只需使用:

mActionBar = getActivity().getSupportActionBar();

或:

mActionBar = ((yourActivityName)getActivity()).getSupportActionBar();


[更新] 删除 mActionBar.setElevation(0); 行,因为 setElevation 仅适用于 API 21+

【讨论】:

  • 我试过了。它仍然在空指针处崩溃。我使用ActionBarActivity 作为父级,所以我必须将它转换为ActionBarActivity
  • 不需要,或者投到你的主机活动中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多