2012-12-02 14 views
9

Ho un PreferenceActivity con diversi frammenti:Come si chiama un PreferenceFragment specifico da PreferenceActivity?

R.xml.preferences: (abbreviato per migliorare la leggibilità):

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

Questo mostrerà una voce di lista con fragments.Fragment1, fragments.Fragment2, ... se SettingsActivity viene avviato.

Ma ora voglio passare un pacchetto tale che un PreferenceFragment specifico viene aperta quando si inizia l'attività:

quindi aggiunto questo SettingsActivity:

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

Ho provato a caricare il frammento via getFragmentManager().findFragmentById(R.id.fragment1), ma restituisce null. Ma anche se avessi l'istanza corretta, non saprei come richiamarla. Inoltre, la chiamata a loadHeadersFromResource(R.xml.preferences_fragment1, target); non funziona: verrà generata una RuntimeException "Il documento XML deve iniziare con tag; foundPreferenceScreen nel file XML binario". Non ho più idee e anche una ricerca su SO e Google non ha restituito risultati rilevanti.

Quindi la mia domanda è: è possibile caricare direttamente un PreferenceFragment (ad esempio frammenti.Fragment1) dal metodo onCreate di Activitiy? Se é cosi, come?

risposta

30

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

EXTRA_SHOW_FRAGMENT final String public static

Aggiunto a livello di API 11 Quando si inizia questa attività, il invocando Intent può contenere questa stringa in più per specificare quale frammento dovrebbe essere inizialmente visualizzato.

Costante Valore: ": 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

Esattamente quello che cercavo per. Grazie! –

+0

Davvero fantastici hanno supportato questo. Grazie per la condivisione. Ha funzionato bene anche per me. – lepert

0

Basta usare sotto codice nel tuo PreferenceActivity e PreferenceFragment in onCreate

addPreferencesFromResource(R.xml.**YOUR PREFERENCE FRAGMENT XML**); 
Problemi correlati