0

我目前正在将我的首选项迁移到带有标题的preferenceFragment 类。

我仍然想支持 Android 版本 < 3.0,所以我也必须使用旧的 xml 文件。(https://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders

我现在的问题是我必须在运行时禁用某些首选项,设置摘要等。我现在如何在不编写代码 2 次的情况下执行此操作?

所以我的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()));
  [...]
}

如何调用changePreferences()Android 2.3?我无法从PreferenceActivity.onCreate().

如果我changePreferences()设为静态,我将无法再使用 findPreference。仍然支持 Android 2.3 的最佳方式是什么PrefernceFragment?我应该在哪里放置在运行时更改首选项的方法?

4

0 回答 0