Mam PreferenceActivity z kilkoma fragmentami:Jak wywołać określony PreferenceFragment z PreferenceActivity?
R.xml.preferences: (skróconą dla lepszej czytelności):
<?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);
}
}
Pokaże wpis listy z fragments.Fragment1
, fragments.Fragment2
, ... jeśli zostanie rozpoczęte SettingsActivity
.
Ale teraz chcę przekazać Bundle tak, że specyficzne PreferenceFragment jest otwierany podczas uruchamiania działalności:
więc dodałem to do SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
Próbowałem załadować fragment przez getFragmentManager().findFragmentById(R.id.fragment1)
, ale to zwraca null
. Ale nawet gdybym miał prawidłową instancję, nie wiedziałbym, jak ją przywołać. Ponadto wywołanie loadHeadersFromResource(R.xml.preferences_fragment1, target);
nie działa - spowoduje to zgłoszenie wyjątku RuntimeException "Dokument XML musi rozpoczynać się od znacznika; foundPreferenceScreen w pliku binarnego XML". Nie mam żadnych pomysłów, a także wyszukiwanie w SO i Google nie zwróciło żadnych istotnych wyników.
Moje pytanie brzmi: czy możliwe jest bezpośrednie załadowanie PreferenceFragment (np. Fragments.Fragment1) z metody onCreate Activitiy? Jeśli tak to jak?
Dokładnie to, czego szukałem dla. Dzięki! –
Naprawdę fajnie, że to wspierali. Dziękuję za udostępnienie. To też zadziałało dobrze dla mnie. – lepert