Home » Android » android – Can't get Action Bar in fragment class

android – Can't get Action Bar in fragment class

Posted by: admin April 23, 2020 Leave a comment

Questions:

I have an activity with three fragment classes inside it. I get an error when trying to change the action bar title from inside of them. If I try to make the classes just public and not public static I get an error when I try to start that class. It should be pretty clear that the code is for preferences although that shouldn’t change anything . Here’s the code:

package com.simon.wikiics;

import android.preference.*;
import android.os.*;
import java.util.*;

public class MainSettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.headers, target);
}

//If I don't make the classes static my app force closes when I try to start them
public static class NavigationSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.navigation);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Navigation");

    }
}

public static class InterfaceSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.interf);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Interface");
    }

}

public static class OtherSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.other);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Other");
    }
}
}
How to&Answers:

A static class cannot see private fields of another class. You will need to use getActivity().getActionBar() to retrieve it.

Answer:

@Robert Estivil
If you are using AppCompatActivity then use this:

actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();

Answer:

Though i am late in answering here.
I found arul’s answer perfect, but now ActionbarActivity is deprecated so slight modification to that answer will finish the job:

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();

Answer:

With AppCompatActivity it is advised to shift to Toolbar instead of the action bar, But if you are not doing so then use this to get an instance of action bar.

((AppCompatActivity )getActivity()).getSupportActionBar();

Answer:

if you use SherlokActionBar you can called your action bar using

ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();