我正在为我的应用程序开发首选项列表。目前只有一个,但是我敢肯定,随着它的充实,还会有更多。我的第一个偏好是“主题”选择器,您可以在其中为某些预定义元素选择背景颜色主题。
我想为即将到来的偏好设置一个双 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/