2014-02-25 35 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); 
    } 
}