2012-12-02 20 views
9

Ich habe einen PreferenceActivity mit mehreren Fragmenten:Wie rufe ich ein bestimmtes PreferenceFragment von einer PreferenceActivity auf?

R.xml.preferences: (zur besseren Lesbarkeit gekürzt):

<?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); 
    } 
} 

Dies wird zeigen, einen Listeneintrag mit fragments.Fragment1, fragments.Fragment2, ... wenn SettingsActivity gestartet wird.

Aber jetzt möchte ich ein Bündel so passieren, dass eine bestimmte PreferenceFragment geöffnet wird, wenn die Aktivität beginnen:

so habe ich dies zu SettingsActivity:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) { 
     // directly jump to fragments.Fragment1 
    } 
} 

Ich versuchte, das Fragment zu laden über getFragmentManager().findFragmentById(R.id.fragment1), aber dies gibt null zurück. Aber selbst wenn ich die richtige Instanz hätte, würde ich nicht wissen, wie ich sie aufrufen soll. Auch das Aufrufen von loadHeadersFromResource(R.xml.preferences_fragment1, target); funktioniert nicht - Dies wird eine RuntimeException auslösen "XML-Dokument muss mit Tag; foundPreferenceScreen bei Binär XML-Datei starten". Ich habe keine Ideen mehr und auch eine Suche auf SO und Google hat keine relevanten Ergebnisse zurückgegeben.

Meine Frage ist also: Ist es möglich, ein PreferenceFragment (z. B. fragments.Fragment1) direkt von der onCreate-Methode von Activitiy zu laden? Wenn das so ist, wie?

Antwort

30

Nach: http://developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT

public static final String EXTRA_SHOW_FRAGMENT

Added in API-Ebene 11 Wenn diese Aktivität starten, die den Aufruf Intent kann diese zusätzliche Zeichenfolge enthält, um festzulegen, welches Fragment sein sollte anfänglich angezeigt.

Konstanter Wert: ": android: show_fragment"

intent = new Intent(this, SettingsActivity.class); 
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, Fragment1.class.getName()); 
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true); 
+0

Genau das, was ich gesucht habe zum. Vielen Dank! –

+0

Wirklich cool haben sie das unterstützt. Danke für das Teilen. Es hat auch gut für mich funktioniert. – lepert

0

Code unten in Ihrem PreferenceActivity Verwenden Sie einfach und PreferenceFragment in onCreate

addPreferencesFromResource(R.xml.**YOUR PREFERENCE FRAGMENT XML**); 
Verwandte Themen