35

3つのフラグメントクラスを含むアクティビティがあります。アクションバーのタイトルを内部から変更しようとするとエラーが発生します。クラスをパブリック静的ではなくパブリックだけにしようとすると、そのクラスを開始しようとするとエラーが発生します。コードが設定用であることはかなり明確なはずですが、それは何も変更しないはずです。コードは次のとおりです。

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 に答える