我目前正在将我的偏好设置迁移到带有标题的preferenceFragment类。
我仍然想支持Android版本< 3.0所以我也必须使用遗留的xml文件。 (https://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders)
我现在的问题是我必须在运行时禁用某些首选项,设置摘要等。如何在不编写代码的情况下立即执行此操作?
所以我的preferenceActivity看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String action = getIntent().getAction();
if (action != null) {
if (action.equals(ACTION_TEST)) {
addPreferencesFromResource(R.xml.preferences_push_sms);
// How do I call changePreferences()?
}
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
addPreferencesFromResource(R.xml.preference_headers_legacy);
}
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
public static class SettingsFragmentTest extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
changePreferences();
}
public void changePreferences() {
CheckBoxPreference preference = (CheckBoxPreference) findPreference("pref_toggle");
preference.setChecked(condition()));
[...]
}
如何为Android 2.3调用changePreferences()
?我无法从PreferenceActivity.onCreate()
访问它。
如果我changePreferences()
静态,我将无法使用findPreference。使用PrefernceFragment
仍支持Android 2.3的最佳方法是什么?我应该在哪里放置方法来改变运行时的首选项?