内部に3つのフラグメントクラスを持つアクティビティがあります。それらの中からアクションバーのタイトルを変更しようとするとエラーが発生します。クラスをpublic staticではなくpublicにしようとすると、そのクラスを開始しようとするとエラーが発生します。コードが設定のためであることはかなり明らかであるべきですが、それは何も変更するべきではありません。コードは次のとおりです。
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");
}
}
}
静的クラスは、別のクラスのプライベートフィールドを見ることができません。取得するにはgetActivity().getActionBar()
を使用する必要があります。
@Robert Estivil AppCompatActivity
を使用している場合、これを使用します。
actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
私はここで答えるのが遅れていますが。 arulの答えは完璧であることがわかりましたが、ActionbarActivityは非推奨になったため、その答えを少し変更するだけで作業を完了できます。
ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
AppCompatActivityでは、アクションバーの代わりにToolbarに移行することをお勧めしますが、そうしない場合は、これを使用してアクションバーのインスタンスを取得します。
((AppCompatActivity )getActivity()).getSupportActionBar();
sherlokActionBarを使用する場合は、次を使用してアクションバーを呼び出すことができます
ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();