2013-08-09 13 views
7

Ich kann nicht herausfinden, wie ich in einem PreferenceScreen über die Implementierung einer Schaltfläche nach oben gehen würde. Mit der Schaltfläche "Nach oben" wird in der Aktionsleiste neben Ihrem App-Symbol ein Häkchen angezeigt, mit dem Sie in der Hierarchie der App navigieren können. Weitere Informationen erhalten Sie unter here.Add-up-Taste zu PreferenceScreen

Ich habe eine Präferenz Fragment, das anzeigt, wenn meine Haupttätigkeit geöffnet und ich kann durch das Hinzufügen dieser Zeile die oben-Taste, um bekommen „getActionBar() setDisplayHomeAsUpEnabled (true);.“:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getFragmentManager().beginTransaction() 
    .replace(android.R.id.content, new SettingsFragment()) 
    .commit(); 

Diese bewirkt, dass die Schaltfläche "Nach oben" im Voreinstellungsfragment angezeigt wird. Ich möchte jedoch nur die Schaltfläche "Nach oben" anzeigen, wenn einer meiner PreferenceScreens geöffnet wird und die Navigation zur Hauptnavigation PreferenceFragment ermöglicht wird.

Meine App ist analog zu den wichtigsten Einstellungen App. Nur die untergeordneten Bildschirme, z. B. Standortzugriff, die in der App "Einstellungen" geöffnet werden, haben den Pfeil nach oben.

enter image description here

+1

Und was möchten Sie angezeigt werden, wenn Sie sich im Haupteinstellungen-Bildschirm befinden? Es ist nicht klar, was Sie fragen. – allprog

+1

Im Hauptpräferenzbildschirm möchte ich keine Auf-Taste angezeigt werden. Ich brauche das nicht, weil die Hauptaktivität meiner App einfach ein Präferenzfragment ist. Es gibt nichts anderes für die App als dieses Präferenzfragment. Und innerhalb dieses Fragments habe ich nur eine Präferenz, die einen anderen Präferenzbildschirm öffnet. Es ist nur auf diesem Einstellungsbildschirm, wo ich möchte, dass die Hoch-Taste angezeigt wird. – Richard

Antwort

5

Wenn Ihre vollständige Anwendung ein Einstellungsbildschirm ist, können Sie Ihre Hauptaktivität auf PreferenceActivity setzen und die Unterebenen können Fragmente sein. Auf diese Weise wird die "up" -Funktion standardmäßig sein, was Sie suchen.

-1

Werfen Sie einen Blick auf this.

Für die XML:

<Preference android:title="Acts like a button" 
      android:key="button" 
      android:summary="This will act like a button"/> 

Dann für die Java in Ihrem onCreate()

Preference button = (Preference)findPreference("button"); 

button.setOnPreferenceClickListener(
    new Preference.OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference arg0) { 
      //code for what you want it to do 
      return true; 
     } 
}); 
+0

Ich schätze die Hilfe und ich habe mir das angesehen. Ich glaube nicht, dass es notwendig ist, ein eigenes Layout zu erstellen. Ich möchte nur, dass die Schaltfläche "Hoch" auf dem Einstellungsbildschirm angezeigt wird. – Richard

14

Von diesem question, habe ich einfach diese zwei Codeblöcke zu meinen Vorlieben Fragment:

@Override 
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 
super.onPreferenceTreeClick(preferenceScreen, preference); 

// If the user has clicked on a preference screen, set up the action bar 
if (preference instanceof PreferenceScreen) { 
    initializeActionBar((PreferenceScreen) preference); 
} 

return false; 
} 

Und dieses:

/** Sets up the action bar for an {@link PreferenceScreen} */ 
    public static void initializeActionBar(PreferenceScreen preferenceScreen) { 
    final Dialog dialog = preferenceScreen.getDialog(); 

    if (dialog != null) { 
     // Inialize the action bar 
     dialog.getActionBar().setDisplayHomeAsUpEnabled(true); 

     // Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow 
     // events instead of passing to the activity 
     // Related Issue: https://code.google.com/p/android/issues/detail?id=4611 
     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); 
      } 
     }  
    } 
} 
+2

Interessante Lösung. Zusammen mit deinem Kommentar macht es mehr Sinn. – allprog

+1

beste Lösung. Das funktioniert gut. –

+1

Funktioniert perfekt! – Joze

Verwandte Themen