2016-11-29 82 views
0

我使用AndroidStudio创建的SettingsActivity(扩展了AppCompatPreferenceActivity,它扩展了PreferenceActivity)。我的首选项值存储在DefaultSharedPreferences(pkg-name_preferences.xml)中。测试套件不覆盖DefaultSharedPreferences

我想在测试套件运行时为DefaultSharedPreference文件指定一个不同的名称。这会阻止测试套件覆盖我在正常使用应用程序期间可能设置的任何首选项值。

可以做到这一点吗? (只是要清楚:我能,如果测试套件运行检测,但我不知道如何为DefaultSharedPreferences指定一个名称)

我发现了一些旧文章暗示:

PreferenceManager prefMngr = getPreferenceManager(); 
prefMngr.setSharedPreferencesName("my_name"); 

getPreferenceManager()在API 11中已弃用,如果我尝试使用它,则返回null。

或者也许有其他方法来实现我的目标(测试套件不覆盖应用程序的偏好值)?

回答

0

我想通了。

锅炉板设置活动包括每个样本首选项组的内部类(例如,GeneralPreferenceFragment)。这些类扩展了PreferenceFragment。

我添加延伸PreferenceFragment并指定偏好文件的名称的类:

/** 
* This (abstract) fragment is a super-class for the category-specific fragments. 
* It sets the shared preferences file name. 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
abstract private static class MyPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // set the shared preferences file name 
     getPreferenceManager().setSharedPreferencesName("my file name"); 
    } 
} 

我改变GeneralPreferenceFragment(和其他2内部类)来扩展MyPreferenceFragment,而不是PreferenceFragment。