无法在片段类中获取Action Bar

Swe*_*now 31 android class fragment android-actionbar

我有一个活动,里面有三个片段类.尝试从内部更改操作栏标题时出错.如果我尝试使这些类只是公开而不是公共静态,那么当我尝试启动该类时会出现错误.应该很清楚,代码是针对偏好的,尽管这不应该改变任何东西.这是代码:

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");
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Aru*_*ian 51

@Robert Estivil如果您正在使用,请AppCompatActivity使用此:

actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用ActionBarActivity.你也可以actionBar =((AppCompatActivity)getActivity()).getSupportActionBar(); (3认同)

aho*_*der 49

静态类无法查看另一个类的私有字段.您需要使用getActivity().getActionBar()它来检索它.

  • 如何使用ActionBarActivity? (2认同)

Sou*_*rma 12

虽然我在这里回答迟到了.我发现arul的答案很完美,但现在不推荐使用ActionbarActivity,因此对该答案的轻微修改将完成这项工作:

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
Run Code Online (Sandbox Code Playgroud)