android - oncreatepreferences - ¿Cómo puedo llamar a un PreferenceFragment específico desde una PreferenceActivity?
preference screen android studio (2)
Tengo una actividad de preferencia con varios fragmentos:
R.xml.preferences: (abreviado para una mejor legibilidad):
<?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>
ConfiguraciónActividad :
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
Esto mostrará una entrada de lista con fragments.Fragment1
. fragments.Fragment2
, fragments.Fragment2
, ... si se inicia SettingsActivity
.
Pero ahora quiero pasar un paquete de manera que se abra un PreferenceFragment específico al iniciar la actividad:
así que agregué esto a SettingsActivity :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
Traté de cargar el fragmento a través de getFragmentManager().findFragmentById(R.id.fragment1)
, pero esto devuelve null
. Pero incluso si tuviera la instancia correcta, no sabría cómo invocarla. Además, se llama a loadHeadersFromResource(R.xml.preferences_fragment1, target);
no funciona - Esto generará una RuntimeException "El documento XML debe comenzar con la etiqueta; foundPreferenceScreen en el archivo XML binario ". No me quedan ideas y también una búsqueda en SO y Google no arrojó ningún resultado relevante.
Entonces mi pregunta es: ¿es posible cargar directamente un PreferenceFragment (por ejemplo, fragments.Fragment1) del método onCreate de Activitiy? ¿Si es así, cómo?
De acuerdo con: http://developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT
public static final String EXTRA_SHOW_FRAGMENT
Agregado en el nivel 11 de API Al iniciar esta actividad, el Intento de invocación puede contener esta cadena adicional para especificar qué fragmento se debe mostrar inicialmente.
Valor constante: ": 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 );
Simplemente use el código siguiente en su PreferenceActivity y PreferenceFragment en onCreate
addPreferencesFromResource(R.xml.**YOUR PREFERENCE FRAGMENT XML**);