【Androidアプリケーションの設定画面を作ろう】PreferenceActivityのメソッド
PreferenceActivityは設定画面を作るためのActivityです。
Android3.0(API レベル 11)を境に前と後で実装方針が大きく変化しています。
- Android3.0以前はPreferenceActivityを単体で使い設定画面を作成します。
 - Android3.0以後は「ActivityとPreferenceFragment」や「PreferenceActivityとPreferenceFragment」を組み合わせて作成します。
 
コンテンツペインのクリックを検知する
boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref)はコンテンツペインの fragment属性が設定された項目をクリックした時に呼ばれるメソッドです。PreferenceActivity#onPreferenceStartFragmentをオーバーライドすることでクリックされたことを検知することができます。
第一引数はコンテンツペインに設置されているFragmentのインスタンス、第二引数はクリックされた設定項目のPreferenceインスタンスがそれぞれ渡されます。
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
        Log.d(TAG, "onPreferenceStartFragment: " + pref.getFragment());
        return super.onPreferenceStartFragment(caller, pref);
    }
コンテンツペインを変更する
void startPreferencePanel(String fragmentClass, Bundle args, int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode)はコンテンツペインを変更するメソッドです。PreferenceActivity#startPreferencePanelはシングルモードとマルチペインモードで動作が異なります。
シングルモードではPreferenceActivity#startWithFragmentを使ってコンテンツペインを変更します。
マルチペインモードではFragmentManagerを使ってコンテンツペインを変更します。
| String fragmentClass | 起動するFragmentの完全修飾名を設定します。 | 
| Bundle args | 起動するFragmentに渡すデータを設定します。 | 
| int titleRes | タイトルに設定する文字列リソースIDを設定します。 | 
| CharSequence titleText | タイトルに設定する文字列で設定します。 | 
| Fragment resultTo | Fragment#setTargetFragmentを使い結果を返すFragmentを設定します。 | 
| int resultRequestCode | Fragment#setTargetFragmentを使い結果を返す時のリクエストコードを設定します。 | 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button footerView = new Button(this);
        footerView.setText("Footer");
        footerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startPreferencePanel(Prefs1Fragment.class.getName() , new Bundle() , 0 , "aaa" , null , 0);
            }
        });
        setListFooter(footerView);
    }
コンテンツペインを終了する
void finishPreferencePanel(Fragment caller, int resultCode, Intent resultData)はコンテンツペインを終了させるためのメソッドです。PreferenceActivity#finishPreferencePanelはシングルモードとマルチペインモードで動作が異なります。
シングルモードではPreferenceActivity#setResultの後にPreferenceActivity#finishを使ってコンテンツペインが終了します。
マルチペインモードではPreferenceActivity#onBackPressedを使ってコンテンツペインのFragmentを戻し、Fragment#onActivityResultで結果を返却します。
| Fragment caller | シングルペインモードやマルチペインモードで結果を返す必要がない場合ではnullを渡します。 マルチペインモードで結果を返す場合はコンテンツペインに設定されているFragmentインスタンスを渡します。  | 
| int resultCode | 結果を返す先に渡すリザルトコードを設定します。 | 
| Intent resultData | 結果を返す先に渡すデータを設定します。 | 
    public static class Prefs1Fragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_general);
        }
        @Override
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
            ((MyPreference1Activity)getActivity()).finishPreferencePanel(this, Activity.RESULT_OK,new Intent());
            return super.onPreferenceTreeClick(preferenceScreen, preference);
        }
    }
ヘッダーリストの表示・非表示を変更する
boolean onIsHidingHeaders()はヘッダーリストの表示・非表示を切り替えるために使用します。PreferenceActivity#onIsHidingHeadersをオーバーライドし表示の場合はtrueを、非表示の場合はfalseを返却することで制御することができます。
    @Override
    public boolean onIsHidingHeaders() {
        return true;
    }