Show-up-Button in actionBar in Subscreen-Einstellungen

Ich habe meine Vorlieben wie in den offiziellen Richtlinien gezeigt umgesetzt.

Ich habe eine PreferenceActivity, die das PreferenceFragment wie folgt schafft:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (extras != null) { Bundle bundle = new Bundle(); _widgetID = extras.getInt(GlobalSettings.EXTRA_WIDGET_ID); bundle.putInt(GlobalSettings.EXTRA_WIDGET_ID, _widgetID); WidgetSettingsFragment fragment = new WidgetSettingsFragment(); fragment.setArguments(bundle); getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit(); } } 

Das PreferenceFragment lädt die Vorlieben aus den Ressourcen und enthält einen Vorzugs-Subscreen wie folgt:

 <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> 

Das funktioniert so gut, aber jetzt möchte ich gern einen up-Button in der actionBar haben, wenn der Präferenzen-Subscreen angezeigt wird. Irgendeine Idee, wie das zu erreichen?

Ich habe versucht, setDisplayHomeAsUpEnabled(true) in meiner Aktivität setDisplayHomeAsUpEnabled(true) aber dann wird die up-Button nur in den Haupteinstellungen (wo es nicht sollte) und nicht im Subscreen angezeigt.

Ich frage mich, dass auch in den offiziellen docs der Subscreen ohne einen aktiven up-Button angezeigt wird: Einstellen von Subscreens

Link zu den docs: Einstellungen

Jede Hilfe ist wirklich willkommen

  • Halten Sie die Aktionsleiste beim Ändern von PreferenceScreen angezeigt
  • Symbolleiste ist in verschachteltem PreferenceScreen versteckt
  • Teiler zwischen Kategorie in PreferenceFragment
  • Wie erkennt man, wenn ein innerer PreferenceScreen geschlossen wurde
  • PreferenceFragment Crashing, Null Objekt Referenz
  • ScrollView> LinearLayout> PreferenceFragment ist null Höhe
  • PreferenceFragmentCompat erfordert PräferenzTheme gesetzt werden
  • Blättern Sie zu / setzen Sie die Position der benutzerdefinierten Listenpräferenz
  • 3 Solutions collect form web for “Show-up-Button in actionBar in Subscreen-Einstellungen”

    Ich habe es endlich zur Arbeit gemacht: D. Es ist ziemlich hackig, aber es funktioniert.

    Das Problem ist, dass die Verwendung von Subscreens in XML-Layouts in einigen "Code Magic" führt. Eine neue Aktivität / Dialog wird für den Subscreen gestartet und Sie haben keinen direkten Zugriff darauf.

    Um Zugriff auf die Aktionsleiste und den OnClickListener der Home / Up-Taste zu erhalten, musst du einen Verweis auf deinen PreferenceScreen erhalten und den übergeordneten Dialog erhalten, um auf die Aktionsleiste und die Home / Up-Taste zuzugreifen.

    So ist es in meinem PreferenceFragment:

      @Override public void onCreate(Bundle savedInstanceState) { ... final PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference(getString(R.string.keyPrefScreenDynamicWidgetDetails)); preferenceScreen.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { preferenceScreen.getDialog().getActionBar().setDisplayHomeAsUpEnabled(true); final Dialog dialog = preferenceScreen.getDialog(); View homeBtn = dialog.findViewById(android.R.id.home); if (homeBtn != null) { OnClickListener dismissDialogClickListener = new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }; // Prepare yourselves for some hacky programming ViewParent homeBtnContainer = homeBtn.getParent(); // The home button is an ImageView inside a FrameLayout if (homeBtnContainer instanceof FrameLayout) { ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent(); if (containerParent instanceof LinearLayout) { // This view also contains the title text, set the whole view as clickable ((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener); } else { // Just set it on the home button ((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener); } } else { // The 'If all else fails' default case homeBtn.setOnClickListener(dismissDialogClickListener); } } return true; } }); ... } 

    Der folgende Link gab mir die letzten Hinweise und Code, um mein Problem zu lösen:

    Aktion Bar Home Button nicht funktional mit verschachteltem PreferenceScreen

    Ich mache dies nach den Android-Dokumenten in der "Unterstützung älterer Versionen mit Präferenz-Header" Abschnitt http://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders . Mit dem Legacy PreferenceActivity, spezifizieren Sie eine Präferenz in der XML, die eine Absicht auf die gleiche Präferenzaktivitätsklasse startet. Die Aktivität prüft die Absichtsaktion und bestimmt, ob sie verschachtelt ist oder nicht (um die Schaltfläche oben anzuzeigen) und welche Voreinstellung xml auf dem Bildschirm aufzublasen ist.

    Natürlich beabsichtige ich auch ältere Geräte zu unterstützen. Ich habe festgestellt, dass die PreferenceFragment nur für große Tabletten nützlich ist, die Präferenz-Header verwenden.

    Zur Wiederverwendung von Vorlieben zwischen Handys und Tabletten kam ich mit dieser Lösung auf https://stackoverflow.com/a/20806812/1139784

    Um die Aktion zu aktivieren, gehen Sie wie folgt vor:

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayUseLogoEnabled(true); 

    Das wird dir das ikone geben

    dann füge hinzu

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } 

    Du kannst das ändern, wo du hin willst. Als weitere Option können Sie die NavigateUpTo (Intent Intent) und die onSupportNavigateUpTo (Intent Intent) Methoden verwenden und die Absicht angeben, zu der Sie zurückkehren möchten.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.