2014-02-25 52 views
7

我正在爲我的應用程序開發一個首選項列表。現在,只有一個,但我相信隨着它的充實將會有更多。我的首選是「主題」選擇器,您可以在其中爲某些預定義元素選擇背景顏色主題。是否可以混合使用「偏好」和偏好標題?

我想爲即將推出的首選項設置一個雙窗格界面,但我不需要在首選項標題使用的「子目錄」中使用此首選項。有沒有辦法在頭文件列表中添加一個'首選項'(通過XML),這樣它就會出現在根首選項中?我看了......沒有看到任何例子,如果這是可能的。現在我所擁有的是一個「主題」按鈕,它轉到一個新的首選項頁面(它生活的另一個片段),該頁面對於不屬於某個類別的首選項進行2次點擊而不是一次。

回答

1

雖然實際上不能將Preference對象放入首選標題列表中,但您可以使首選標題的行爲與首選項類似。您只需爲標題分配一個ID並在您的PreferenceActivity中覆蓋onHeaderClick()即可。

下面是如何模擬ListPreference作爲首選項標題的示例。

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); 
    } 
}