如何从Android上的片段访问ActionBar

时间:2015-04-15 21:21:07

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

在我的应用程序中,我只有一个活动(扩展了ActionBarActivity)和各种碎片(扩展了Fragment)。 当用户单击菜单选项时,应用程序将更改片段。 此刻我想改变de title和ActionBar的背景颜色。 当我尝试ActionBar actionBar = getActivity().getActionBar();时,我得到了一个空例外。

我正在使用支持库,并且在活动中我成功使用android.support.v7.app.ActionBar actionBar = getSupportActionBar();

片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.material_cadastro, container, false);

    viewHolder = new MaterialViewHolder(view);

    ActionBar actionBar = getActivity().getActionBar();
    actionBar.setTitle(R.string.inserir_material);

    return view;
}

Debuging我得到了Activity返回OK,但ActionBar为null:

getActivity() = {br.com.americocarelli.vendasfacil.ui.MenuPrincipal@3b56766f}
getActivity().getActionBar() = null

3 个答案:

答案 0 :(得分:3)

覆盖您的onAttach(Activity),然后将Activity投放到ActionBarActivity,您就可以获得ActionBar。 像:

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    ActionBar actionBar=((ActionBarActivity)activity).getSupportActionBar();
}

答案 1 :(得分:1)

由于您使用支持库(ActionBarActivity),因此使用((ActionBarActivity)getActivity()).getSupportActionBar();可以访问支持操作栏。

答案 2 :(得分:0)

您可能正在使用构建工具> = 21构建它,该版本会导致activity.getActionBar()返回null,您应该使用getSupportActionBar()。 编辑:如果你在这一行得到NPE:getActivity()。 ...然后你可能在片段附加到活动之前或之后引用它。你可以粘贴你正在使用它的上下文(地点,功能)吗?