我正在为我的应用开发一个首选项列表。现在,只有一个,但我相信会有更多,因为它得到了充实。我的第一个偏好是“主题”选择器,您可以在其中为某些预定义元素选择背景颜色主题。
我想为即将到来的prefs使用双窗格界面,但我不需要在首选项标题使用的“子目录”中使用此首选项。有没有办法在标题列表中添加“首选项”(通过XML),以便它出现在根首选项中?我看了......没有看到任何关于这是否可行的例子。现在我所拥有的只是一个“主题”的按钮,它会转到一个新的首选项页面(它所在的另一个片段),它只有2次点击,而不是一个不属于某个类别的首选项。
答案 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);
}
}