我有一个活动,里面有三个片段类。尝试从内部更改操作栏标题时出错。如果我尝试使这些类只是公开而不是公共静态,那么当我尝试启动该类时会出现错误。应该很清楚,代码是针对偏好的,尽管这不应该改变任何东西。这是代码:
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");
}
}
}
答案 0 :(得分:49)
静态类无法看到另一个类的私有字段。您需要使用getActivity().getActionBar()
来检索它。
答案 1 :(得分:48)
@Robert Estivil
如果您使用AppCompatActivity
,请使用此:
actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
答案 2 :(得分:12)
虽然我在这里回答迟到了。 我发现arul的答案很完美,但是现在已经弃用了ActionbarActivity,因此对该答案的轻微修改将完成这项工作:
ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
答案 3 :(得分:2)
使用AppCompatActivity时,建议转移到工具栏而不是操作栏,但如果您不这样做,请使用此方法获取操作栏的实例。
((AppCompatActivity )getActivity()).getSupportActionBar();
答案 4 :(得分:0)
如果你使用SherlokActionBar,你可以使用
调用你的操作栏ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();