2014-02-25 7 views
7

Ich entwickle eine Liste von Einstellungen für meine App. Momentan gibt es nur einen, aber ich bin mir sicher, dass es mehr geben wird, wenn es ausgearbeitet wird. Meine erste Präferenz ist ein "Themen" -Wähler, bei dem Sie das Hintergrundfarbthema für einige vordefinierte Elemente auswählen.Ist es möglich, einen Präferenz- und einen Präferenz-Header zu mischen?

Ich möchte eine Dual-Fenster-Schnittstelle für meine bevorstehenden Einstellungen, aber ich brauche diese Einstellung nicht in einem 'subcategeory', dass Präferenz-Header verwenden. Gibt es eine Möglichkeit, der Kopfzeile eine Präferenz (via XML) hinzuzufügen, damit sie in den Stammeinstellungen angezeigt wird? Ich habe geschaut ... habe keine Beispiele gesehen, wenn das möglich ist. Im Moment habe ich nur einen Button für 'Themes', der auf eine neue Preferences-Seite geht (ein anderes Fragment, unter dem er lebt), die statt einer für eine Einstellung, die nicht in eine Kategorie fällt, 2 Klicks macht.

Antwort

1

Sie können festlegen, dass eine Voreinstellung sich wie eine Voreinstellung verhält, obwohl Sie kein Preference Objekt in die Liste der Voreinstellungen setzen können. Alles, was Sie tun müssen, ist, der Kopfzeile eine ID zuzuweisen und onHeaderClick() in Ihrer PreferenceActivity zu überschreiben.

Hier ist ein Beispiel für die Simulation eines als Präferenz-Header.

pref_headers.xml:

<preference-headers 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <header 
     android:id="@+id/choose_theme" 
     android:title="Theme" /> 
</preference-headers> 

MyPreferenceActivity.java:

public class MyPreferenceActivity extends PreferenceActivity { 

    private CharSequence[] mThemeOptions = 
      new CharSequence[] {"Red", "Blue", "Awesome"}; 
    private int mSelectedTheme = 0; 

    @Override 
    public void onBuildHeaders(List<Header> headers) { 
     loadHeadersFromResource(R.xml.pref_headers, headers); 
     for (Header h : headers) { 
      if (h.id == R.id.choose_theme) { 
       h.summary = mThemeOptions[mSelectedTheme]; 
      } 
     } 
    } 

    @Override 
    public void onHeaderClick(Header header, int position) { 
     if (header.id == R.id.choose_theme) { 
      OnClickListener l = new OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        mSelectedTheme = which; 
        dialog.dismiss(); 
        // Trigger the summary text to be updated. 
        invalidateHeaders(); 
       } 
      }; 
      new AlertDialog.Builder(this) 
        .setSingleChoiceItems(mThemeOptions, mSelectedTheme, l) 
        .show(); 
      return; 
     } 
     super.onHeaderClick(header, position); 
    } 
} 
Verwandte Themen