У меня есть PreferenceScreen с дополнительным PreferenceScreen:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="SOUND">
<PreferenceScreen android:title="Sound Options"
android:fragment="com.test.SoundPreferenceFragment">
</PreferenceScreen>
</PreferenceCategory>
...
Вспомогательная настройка представляет собой пользовательскую реализацию PreferenceFragment.
public class SoundPreferencesFragment extends PreferenceFragment implements
OnSharedPreferenceChangeListener {
...
Мне интересно, как я должен запустить пользовательский фрагмент. В моей основной деятельности я делаю это:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, settingsPreference).commit();
}
Что отлично работает, чтобы запустить мой экран предпочтений основных настроек.
Затем я переопределяю:
@Override
public boolean onPreferenceStartFragment(PreferenceFragment fragment, Preference preference) {
getFragmentManager().beginTransaction().replace(android.R.id.content, new SoundPreferenceFragment()).commit();
return true;
}
Кажется, это работает, но у меня есть несколько вопросов.
- Это правильный путь?
- Когда я захожу в настройки «Звуки» и нажимаю кнопку «Назад», я полностью выхожу из настроек. Это так должно работать?
- Я думаю, что я также могу указать вспомогательному предпочтению начать новое намерение, то есть создать новую активность SoundPreferencesActivity. Это более "правильный" способ.
РЕДАКТИРОВАТЬ:
Я также пытался не расширять «onPreferenceStartFragment» в своей основной деятельности, надеясь, что Android позаботится о правильном запуске нового предпочтения. Кажется, что он запускает новый PreferenceFragment, но он накладывает пользовательский интерфейс прямо поверх основного пользовательского интерфейса настроек.