Gimali
Gimali

Reputation: 787

android getSupportActionBar() returns null in fragment

UPDATE

I had not mentioned anything about using ToolBar with ActionBarActivity. And that is the reason I always get null pointer exception. For those who face same problem please refere this answer


I have this fragment code to change appearance of support action bar when fragment is changed.

@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);
        }
    }

I've referred previous/similar questions regarding how to solve this error. Those solutions suggest to change actionbar appearance in onActivityCreated() method. I tried onAttach() also. None seems to work. I have used support actionbar to maintain backward compatibility. Activity is also casted accordingly to ActionBarActivity.

Complete code is pretty much lengthy so I have skipped posting it. If needed I can post complete code and update question with more details as well.

Error log

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

Line 215 is : mActionBar.setElevation(0);

Upvotes: 4

Views: 10587

Answers (2)

Xcihnegn
Xcihnegn

Reputation: 11597

Just use:

mActionBar = getActivity().getSupportActionBar();

or:

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


[UPDATE] Remove the line mActionBar.setElevation(0); because setElevation just available for API 21+

Upvotes: 2

Gimali
Gimali

Reputation: 787

I missed mentioning little more info in this question. That's the reason other nice SO users could not answer it correctly. So here I answer it my own.

I've used ToolBar in place of regular ActionBar. When you use ToolBar you have to set it as ActionBar. So by doing -

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

And after that I can change title and appearance easily by -

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

Just remember to set toolbar as actionbar before actually using actionbar in fragment.

Upvotes: 8

Related Questions