2013-08-09 11 views
7

Nie mogę dowiedzieć się, w jaki sposób chciałbym wdrożyć przycisk up w numerze PreferenceScreen. Przycisk w górę wyświetla wskaźnik na pasku zadań obok ikony aplikacji, która pozwala poruszać się po hierarchii aplikacji, więcej informacji: here.Przycisk dodawania do PreferenceScreen

Mam fragment Preference wyświetlający kiedy moja główna działalność jest otwarty i mogę dostać się przycisk, aby wyświetlić dodając ten wiersz "getActionBar() setDisplayHomeAsUpEnabled (true);".:

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

ten powoduje wyświetlenie przycisku "up" w Fragmentie preferencji, ale chcę wyświetlić przycisk "up" tylko wtedy, gdy jeden z moich PreferenceScreens jest otwarty, umożliwiając nawigację do głównego PreferenceFragment.

Moja aplikacja jest analogiczna do głównej aplikacji ustawień. Tylko ekrany podrzędne, takie jak Dostęp do lokalizacji, otwierane z poziomu głównej aplikacji Ustawienia, mają strzałkę w górę.

enter image description here

+1

Co chcesz pokazywać, gdy jesteś na głównym ekranie preferencji? Nie jest jasne, o co pytasz. – allprog

+1

Na głównym ekranie preferencji nie chcę wyświetlać przycisku w górę. Nie potrzebuję, ponieważ główna aktywność mojej aplikacji jest po prostu fragmentem preferencji. W tej aplikacji nie ma nic oprócz tego fragmentu Preferencji. Wewnątrz tego fragmentu mam tylko jedną preferencję, która otwiera inny ekran preferencji. Jest to tylko na tym ekranie preferencji, gdzie chcę wyświetlić przycisk w górę. – Richard

Odpowiedz

5

Jeśli pełna aplikacja jest ekranem preferencji, możesz ustawić główną aktywność jako PreferenceActivity, a pod-poziomy mogą być fragmentami. W ten sposób funkcja "up" będzie domyślnie tego, czego szukasz.

-1

Wystarczy popatrzeć na this.

Dla XML:

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

Następnie dla Java w swojej 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

Doceniam pomoc i spojrzałem na to. Nie sądzę, że konieczne jest zbudowanie własnego układu, po prostu chcę, aby przycisk up pojawił się na ekranie preferencji. – Richard

14

Od tego question, po prostu dodaje się te dwa bloki kodu do mojego preferencji 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; 
} 

A ten:

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

Ciekawe rozwiązanie. Wraz z komentarzem ma to więcej sensu. – allprog

+1

najlepsze rozwiązanie. To działa dobrze. –

+1

Działa idealnie! – Joze

Powiązane problemy