Подтвердить что ты не робот

Не удается получить панель действий в классе фрагментов

У меня есть активность с тремя классами фрагментов внутри него. Я получаю сообщение об ошибке при попытке изменить название панели действий изнутри. Если я попытаюсь сделать классы просто общедоступными, а не public static, я получаю сообщение об ошибке при попытке запустить этот класс. Должно быть довольно ясно, что код предназначен для предпочтений, хотя это ничего не должно изменить. Здесь код:

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");
    }
}
}
4b9b3361

Ответ 1

Статический класс не может видеть частные поля другого класса. Вам понадобится getActivity().getActionBar(), чтобы извлечь его.

Ответ 2

@Robert Estivil Если вы используете AppCompatActivity используйте это:

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

Ответ 3

Хотя я опоздал с ответом здесь. Я нашел решение arul идеальным, но теперь ActionbarActivity устарела, поэтому небольшая модификация этого ответа завершит работу:

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

Ответ 4

С AppCompatActivity рекомендуется перейти на Панель инструментов вместо панели действий. Но если вы этого не сделаете, используйте это, чтобы получить экземпляр панели действий.

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

Ответ 5

если вы используете SherlokActionBar, вы можете вызвать свою панель действий, используя

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