2013-03-06 45 views
5

我的应用程序中有一些功能需要安卓版本4.2+。 因此,在我的主要活动中,我需要检查可用的操作系统功能并修改(启用/禁用)在我的PreferenceActivity中定义的首选项。如何从PreferenceActivity外部更改偏好项目的状态?

下面的代码是无法访问从PreferenceActivity

ListPreference prefReport = (ListPreference)getPreferenceScreen().findPreference("pref_report"); 
prefDspProfile.setValue("0"); 

外面所以我的问题是如何修改从外部PreferenceActivity喜好的项目。

回答

2

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

您需要一个上下文才能访问SharedPreference。以其他simpleAcitivity的onCreate方法为例。

UPDATE: 使用这种方法你都无法启用/禁用物品。你可以改变它们的值或删除

@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(); 
    } 

} 

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

res-v4 
    setting.xml 

res-v17 
    setting.xml -> This file can include specific Jelly Beans configs 
+0

关于您的第一个解决方案,项目无法启用/禁用,所以我不知道他们是否与此版本的Android兼容或不兼容。你的第二个解决方案是我的答案。快乐编码Bruno Mateus – 2013-03-06 16:22:00

+0

不客气。 – 2013-03-06 16:34:19

相关问题