无法在片段类中获取操作栏

35

我有一个包含三个片段类的活动。 当我尝试从它们内部更改操作栏标题时,会出现错误。 如果我尝试使这些类只是公共的而不是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");
    }
}
}
5个回答

57

@Robert Estivil 如果您正在使用 AppCompatActivity,请使用以下代码:

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

3
ActionBarActivity已经被废弃。你也可以使用以下代码获取ActionBar:actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar(); - Veener
你有在安卓2手机上检查过这个功能是否真正可用吗? - user3502626

54

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


谢谢!还有一个问题,我该如何通过意图从此片段类内部启动活动? - SweSnow
@SweSnow 上下文.startActivity(new Intent(上下文, MyActivity.class)); - ahodder
我正在尝试使用您的方法(getActivity().getActionBar().setDisplayShowTitleEnabled(false))关闭操作栏标题,但是我遇到了空指针异常。 - Srikar Reddy
@SrikarReddy 这种情况可能有很多原因。最有可能的原因是您正在使用不包括操作栏的活动主题。我建议您再次检查您的主题是否为“android:Theme.Holo.Light.DarkActionBar”之类的主题。 - ahodder

15

虽然我回答晚了。 我发现arul的回答很完美,但现在ActionBarActivity已经过时,所以稍微修改一下那个答案就能完成工作:

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

3

在使用AppCompatActivity时,建议使用工具栏(Toolbar)而非操作栏。但如果您不这样做,请使用以下代码获取操作栏实例。

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

0
如果您使用SherlokActionBar,您可以使用以下方式调用您的操作栏:
ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接