是否可以混合“首选项”和首选项标题?

时间:2014-02-25 02:33:04

标签: android

我正在为我的应用开发一个首选项列表。现在,只有一个,但我相信会有更多,因为它得到了充实。我的第一个偏好是“主题”选择器,您可以在其中为某些预定义元素选择背景颜色主题。

我想为即将到来的prefs使用双窗格界面,但我不需要在首选项标题使用的“子目录”中使用此首选项。有没有办法在标题列表中添加“首选项”(通过XML),以便它出现在根首选项中?我看了......没有看到任何关于这是否可行的例子。现在我所拥有的只是一个“主题”的按钮,它会转到一个新的首选项页面(它所在的另一个片段),它只有2次点击,而不是一个不属于某个类别的首选项。

1 个答案:

答案 0 :(得分:2)

虽然您无法将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);
    }
}