35

我有一个包含三个片段类的活动。尝试从其中更改操作栏标题时出现错误。如果我尝试将这些类设为 public 而不是 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");
    }
}
}
4

5 回答 5

57

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

actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
于 2014-01-08T13:51:58.507 回答
52

静态类看不到另一个类的私有字段。您将需要使用getActivity().getActionBar()来检索它。

于 2012-08-17T22:13:47.330 回答
15

虽然我在这里回答迟了。我发现 arul 的答案很完美,但现在 ActionbarActivity 已被弃用,因此对该答案稍作修改即可完成工作:

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
于 2015-11-28T10:20:28.077 回答
3

使用 AppCompatActivity 建议切换到工具栏而不是操作栏,但如果您不这样做,则使用它来获取操作栏的实例。

((AppCompatActivity )getActivity()).getSupportActionBar();
于 2015-10-02T18:45:54.827 回答
0

如果您使用 SherlokActionBar,您可以使用

ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();
于 2015-03-28T16:38:21.323 回答