web-dev-qa-db-ja.com

フラグメントクラスでアクションバーを取得できません

内部に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");
    }
}
}
30
SweSnow

静的クラスは、別のクラスのプライベートフィールドを見ることができません。取得するにはgetActivity().getActionBar()を使用する必要があります。

49
ahodder

@Robert Estivil AppCompatActivityを使用している場合、これを使用します。

actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
50
Arul Pandian

私はここで答えるのが遅れていますが。 arulの答えは完璧であることがわかりましたが、ActionbarActivityは非推奨になったため、その答えを少し変更するだけで作業を完了できます。

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

AppCompatActivityでは、アクションバーの代わりにToolbarに移行することをお勧めしますが、そうしない場合は、これを使用してアクションバーのインスタンスを取得します。

((AppCompatActivity )getActivity()).getSupportActionBar();
2
war_Hero

sherlokActionBarを使用する場合は、次を使用してアクションバーを呼び出すことができます

ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();
0
Mohamed Hussien