У меня есть PreferenceActivity с несколькими фрагментами:
R.xml.preferences: (сокращен для лучшей читаемости):
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="fragments.Fragment1" android:id="@+id/fragment1" [...] />
<header android:fragment="fragments.Fragment2" android:id="@+id/fragment2" [...] />
[...]
</preference-headers>
SettingsActivity
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
Это покажет запись списка с fragments.Fragment1
, fragments.Fragment2
,... если SettingsActivity
запущен.
Но теперь я хочу передать Bundle таким образом, что при запуске действия открывается специальный PreferenceFragment:
поэтому я добавил это в SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
Я попытался загрузить фрагмент с помощью getFragmentManager().findFragmentById(R.id.fragment1)
, но это возвращает null
. Но даже если бы у меня был правильный экземпляр, я бы не знал, как его вызывать. Кроме того, вызов loadHeadersFromResource(R.xml.preferences_fragment1, target);
не работает - это вызовет исключение RuntimeException "XML-документ должен начинаться с тега; foundPreferenceScreen в двоичном XML файле". У меня нет идей, а также поиск по SO и Google не дал никаких релевантных результатов.
Итак, мой вопрос: возможно ли напрямую загружать PreferenceFragment (например, fragments.Fragment1) из метода Activitiy onCreate? Если да, то как?