如何从PreferenceActivity外部更改首选项的状态?

Meh*_*nai 5 android android-preferences sharedpreferences

我的应用程序中有一些功能需要Android版本4.2+.因此,在我的主要活动中,我将需要检查可用的操作系统功能并修改(启用/禁用)我的定义中的首选项PreferenceActivity.

以下代码无法从外部访问 PreferenceActivity

ListPreference prefReport = (ListPreference)getPreferenceScreen().findPreference("pref_report");
prefDspProfile.setValue("0");
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何从PreferenceActivity外部修改首选项.

Bru*_*eus 2

如果您隐式使用 PreferenceAcitivity,则您正在使用 SharedPreference 文件。因此,在 PreferenceAcitivity 之外,您可以访问 SharedPrefence 文件并更改它。很快,这些更改将反映在您的 PreferenceActivity 上。

您需要一个上下文来访问 SharedPreference。期待其他 simpleAcitivity 的 onCreate 方法的示例。

更新: 使用此方法您无法启用/禁用项目。您可以更改它们的值或删除它们

@Override
protected void onCreate(Bundle state){
   super.onCreate(state);

   // Restore preferences
   SharedPreferences settings = getPreferences(MODE);
   // Make sure we're running on Honeycomb or higher to use ActionBar APIs
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
      //change your setting here
      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
   }

}
Run Code Online (Sandbox Code Playgroud)

另一种方式,在我看来更好、更容易的是提供替代资源您可以提供许多 xml 文件,根据 Android API 级别,使用资源限定符定义您的应用程序设置。例如:v2、v17。

 res-v4
     setting.xml

 res-v17
     setting.xml -> This file can include specific Jelly Beans configs  
Run Code Online (Sandbox Code Playgroud)