PreferenceHeaders を使用せずに昔ながらの単一ページ設定画面を作成するには、次のようにします。
設定画面を呼び出すアクティビティで (例は onMenuItemSelected にあります):
case R.id.menuSettings:
Intent settingsIntent = new Intent(this, SettingsActivity.class);
startActivityForResult(settingsIntent, GC.SETTINGS_ACTIVITY_ID);
break;
XML フォルダーに、昔ながらの PreferenceScreen を作成します。PreferenceCategory、ListPreference、CheckBoxPreference など。PreferenceHeaders は使用しないでください。
設定アクティビティを作成します。
package com.mycompany.project1;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
public class SettingsActivity extends PreferenceActivity {
private final static String TAG = "SettingsAcitivity";
public SettingsActivity() {}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyLog.d(TAG, "onCreate");
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new LocationFragment()).commit();
}
public static class LocationFragment extends PreferenceFragment {
private String TAG = "LocationFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyLog.d(TAG, "onCreate");
addPreferencesFromResource(R.xml.settings);
}
}
}
ダイアログ テーマを設定アクティビティに関連付けないでください。ラジオ ボタンなどの特定の設定タイプでは、奇妙な結果が得られます。(ダイアログを試してみましたが、コーディング エラーが見つかりませんでした。ダイアログ テーマの代わりに標準のアクティビティ テーマを使用すると、すべて正常に機能しました。明らかに、ホロ ダイアログ テーマが設定定義と衝突します。
注: startActivityforResult を使用して、変更された特定の設定値を再初期化できるようにしました。