2013-08-09 37 views
7

Non riesco a capire come vorrei implementare un pulsante su in un PreferenceScreen. Un pulsante su mostra un segno di omissione nella barra delle azioni accanto all'icona della tua app che ti consente di navigare nella gerarchia dell'app, ulteriori informazioni here.Pulsante Aggiungi a PreferenceScreen

Ho un frammento Preferenze che consente di visualizzare quando la mia attività principale è aperta e posso ottenere il fino pulsante per visualizzare con l'aggiunta di questa linea "getActionBar() setDisplayHomeAsUpEnabled (true);.":

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

Questo fa sì che il pulsante su venga visualizzato nel frammento di preferenza, ma voglio solo mostrare il pulsante su quando uno dei miei PreferenceScreens viene aperto, consentendo la navigazione sul principale PreferenceFragment.

La mia app è analoga all'app delle impostazioni principali. Solo le schermate secondarie, come l'Accesso alla posizione, che si aprono dall'app Impostazioni principale hanno la freccia su.

enter image description here

+1

E cosa si desidera visualizzare quando ci si trova nella schermata delle preferenze principali? Non è chiaro cosa stai chiedendo. – allprog

+1

Nella schermata delle preferenze principali, non desidero visualizzare un pulsante su. Non ne ho bisogno perché l'attività principale della mia app è semplicemente un frammento di preferenza. Non c'è nient'altro per l'app ma questo frammento di preferenza. E all'interno di questo frammento, ho solo una preferenza che apre un'altra schermata delle preferenze. È solo su questa schermata delle preferenze, dove voglio che venga visualizzato il pulsante su. – Richard

risposta

5

Se l'applicazione completa è una schermata delle preferenze, è possibile rendere l'attività principale a PreferenceActivity ei sottolivelli possono essere frammenti. In questo modo la funzionalità 'up' sarà di default ciò che stai cercando.

-1

Dai un'occhiata alla this.

Per l'XML:

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

Poi per il Java nel tuo 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

Apprezzo l'aiuto e l'ho osservato. Non penso sia necessario costruire il mio layout, voglio solo che il pulsante su appaia nella schermata delle preferenze. – Richard

14

Da questo question, ho semplicemente aggiunto questi due blocchi di codice per la mia preferenza 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; 
} 

E questo:

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

Soluzione interessante. Insieme al tuo commento ha più senso. – allprog

+1

migliore soluzione. Funziona bene –

+1

Funziona perfettamente! – Joze

Problemi correlati