Preference-Unterbildschirm öffnet sich nicht bei Verwendung von support.v7.preference
Ich versuche, Einstellungen mit Unterbildschirmen mithilfe von AppCompatActivity und support.v7.preference zu implementieren.
Gemäß den Dokumenten fungiert jeder PreferenceScreen in einem anderen PreferenceScreen als Unterbildschirm, und das Framework übernimmt die Anzeige, wenn Sie darauf klicken.http: //developer.android.com/guide/topics/ui/settings.html#Subscreen
<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>
Dies funktioniert einwandfrei, wenn Sie native Activity, PreferenceFragment ... verwenden, aber AppCompatActivity und PreferenceFragmentCompat verwenden und auf das Preference-Element klicken, um es nur hervorzuheben, aber den Unterbildschirm nicht zu öffnen.
Ich konnte in den Dokumenten und im Code nichts finden. Muss ich zusätzliche Rückrufe implementieren?
EDIT: nur der Vollständigkeit halber ...
Dies funktioniert und öffnet den Subscreen:
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);
}
}
}
Dies funktioniert nicht / öffne den Subscreen:
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);
}
}
}
Bearbeiten: 25.01.2016
Nach dem Spielen mit support.v7.preference Für ein paar Tage habe ich meine Ergebnisse hier zusammengefasst, in der Hoffnung, dass es anderen helfen kann:Wie verwende ich support.v7.preference mit AppCompat und möglichen Nachteilen?