在片段类无法获取操作栏(Can't get Action Bar in fragment c

2019-06-27 04:06发布

我有一个内部的三项片段类的活动。 试图从他们的内部改变操作栏冠军时,我得到一个错误。 如果我尽量让班只是公众,而不是公共静态我得到一个错误,当我试图启动类。 它应该是很清楚的是,代码是喜好尽管这不应该改变任何东西。 下面的代码:

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

Answer 1:

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



Answer 2:

@Robert Estivil如果您正在使用AppCompatActivity然后使用此:

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


Answer 3:

虽然我迟到回答这里。 我发现了Arul的回答完美,但现在ActionbarActivity不赞成如此轻微修改这个问题的答案会完成这项工作:

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


Answer 4:

随着AppCompatActivity,建议转移到工具栏 ,而不是操作栏,但如果你不这样做,然后用它来获取操作栏的一个实例。

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


Answer 5:

如果你使用SherlokActionBar你可以使用一个称为你的动作条

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


文章来源: Can't get Action Bar in fragment class