要创建一个没有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);
}
}
}
请勿将对话主题与设置活动相关联。对于某些偏好类型(如单选按钮),您将得到奇怪的结果。(我尝试了对话框,但找不到编码错误。当我使用标准活动主题而不是对话框主题时,一切都正常工作。显然,Holo对话框主题与设置定义冲突。)
注意:我使用“startActivityforResult”,这样我可以重新初始化更改的特定设置值。