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:

  • Holen Sie sich einen Buchstaben Abkürzung von Wochentag eines Datums in Java
  • So ändern Sie die FAB-Hintergrundfarbe
  • Tag: TextLayoutCache Text: Cache Wert gelöscht
  • Android-String-Array auf Array
  • "Parse Error: Es gibt ein Problem beim Parsen des Pakets" bei der Installation von Android-Anwendung
  • Slide-Menü-Sperren Touch-Ereignis auf der oberen Ansicht
  • @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

  • Meteor lädt unendlich nach der Re-Deployment auf dem Server mit appcache
  • Android: ScrollView vs NestedScrollView
  • Umkehrung einer Animation
  • Konvertieren Sie die Klassendatei in die dex-Datei
  • Holen Sie sich ActionBarSherlock actionBarSize in Android 2.x
  • Gibt es irgendeinen Punkt einer Aktivität mit einem Fragment?
  • 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.