que resolvió su problema exactamente el mismo de esta manera.
En su actividad de preferencia:
@Override
protected void onResume() {
super.onResume();
int startingPage = getIntent().getIntExtra(Constants.PREFS_STARTING_PAGE, 0);
switch (startingPage) {
case Constants.MY_PREF_SCREEN_1:
setPreferenceScreen((PreferenceScreen)findPreference(getString(R.string.PREF_SCREEN_1)));
break;
case Constants.MY_PREF_SCREEN_2:
setPreferenceScreen((PreferenceScreen)findPreference(getString(R.string.PREF_SCREEN_2)));
break;
default:
// Nothing to do, but read the warning below.
}
}
entonces usted puede abrir la pantalla de preferencias interior con algo como esto:
Intent prefIntent = new Intent(ctx, MyPreferenceActivity.class);
prefIntent.putExtra(Constants.PREFS_STARTING_PAGE, Constants.MY_PREF_SCREEN_1);
startActivity(prefIntent);
Mira que esto funciona siempre y cuando las instancias de actividad son diferentes: uno instancia para la pantalla de preferencias principal y otra para la pantalla interna. De esta forma, cuando comienzas la actividad sin el parámetro "inicio", siempre caes en la caja del interruptor por defecto y nunca necesitas configurar la pantalla de preferencias principal. El problema aquí es que si primero ejecuta la actividad comenzando con una pantalla pref interna y luego activa la MISMA actividad (con el flag singleInstance, por ejemplo) preguntando por la pantalla pref general (raíz), no podrá llamar a findPreference() para buscar la pantalla de preferencia de raíz desde dentro de una pantalla de preferencia de niño.
Bueno, espero no haber hecho demasiada confusión ;-)