La pantalla secundaria de preferencias no se abre cuando se usa support.v7.preference
Estoy tratando de implementar preferencias con pantallas secundarias usando AppCompatActivity y support.v7.preference
Según los documentos, cada PreferenceScreen dentro de otra PreferenceScreen funciona como una pantalla secundaria, y el marco se encargará de mostrarla cuando se haga clic.http://developer.android.com/guide/topics/ui/settings.html#Subscreens
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- opens a subscreen of settings -->
<PreferenceScreen
android:key="button_voicemail_category_key"
android:title="@string/voicemail"
android:persistent="false">
<ListPreference
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider" ... />
<!-- opens another nested subscreen -->
<PreferenceScreen
android:key="button_voicemail_setting_key"
android:title="@string/voicemail_settings"
android:persistent="false">
...
</PreferenceScreen>
<RingtonePreference
android:key="button_voicemail_ringtone_key"
android:title="@string/voicemail_ringtone_title"
android:ringtoneType="notification" ... />
...
</PreferenceScreen>
...
</PreferenceScreen>
Esto funciona bien con Activity, PreferenceFragment nativo ... pero con AppCompatActivity y PreferenceFragmentCompat, al hacer clic en el elemento Preference solo se resalta, pero no se abre la pantalla secundaria.
No pude encontrar nada al leer los documentos y el código ... ¿necesito implementar alguna devolución de llamada adicional?
EDITAR: solo para completar ...
Esto funciona y abre la pantalla secundaria:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new DemoPreferenceFragment())
.commit();
}
}
static public class DemoPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
Esto no funciona / abre la pantalla secundaria:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new DemoPreferenceFragment())
.commit();
}
}
static public class DemoPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
}
}
}
Editar: 25/01/2016
Después de jugar consoporte.v7.preferencia Durante unos días, he resumido mis hallazgos aquí, esperando que pueda ayudar a otros:Cómo usar support.v7.preference con AppCompat y posibles inconvenientes