2016-11-29 6 views
0

Я использую SettingsActivity, созданный AndroidStudio (расширяет 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.