我正在为我的应用程序开发首选项列表。目前只有一个,但是我敢肯定,随着它的充实,还会有更多。我的第一个偏好是“主题”选择器,您可以在其中为某些预定义元素选择背景颜色主题。

我想为即将到来的偏好设置一个双 Pane 界面,但是在首选项 header 使用的“子类别”中不需要此首选项。有没有一种方法可以将“首选项”(通过XML)添加到 header 列表中,使其出现在根首选项中?我看过……还没有看到任何可能的例子。现在,我所拥有的只是一个“主题”按钮,该按钮会转到一个新的首选项页面(它位于其中的另一个 fragment ),该页面将单击2次而不是单击一个类别下的首选项。

最佳答案

您可以使首选项 header 的行为像首选项一样,尽管您实际上不能将Preference对象放入首选项 header 的列表中。您要做的就是为标题分配一个ID,并在PreferenceActivity中覆盖onHeaderClick()

这是一个如何模拟ListPreference作为首选项 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);
    }
}

关于android - 是否可以将 'preference'和首选项 header 混合使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22003460/

10-13 07:11