我正在使用支持库中的PreferenceFragmentCompat(preference-v14:23.0.1 - 虽然我也尝试过23.1.1)。我在XML文件中拥有所有我的首选项设置,并且正常地在onCreatePreferences中对它们进行充气:
du
首次显示片段时,我想隐藏一些首选项,直到我收到网络回调的结果,我可能希望再次显示这些偏好。
我尝试将各种偏好设置的可见性设置为false,希望稍后我可以再将它们设置为可见,但它看起来像:
@Override
public void onCreatePreferences(final Bundle bundle, final String s) {
addPreferencesFromResource(R.xml.fragment_settings);
从列表中有效地删除首选项,当我稍后再次尝试在Preference上查找时,它将返回null。
作为替代方案,我创建了一个创建首选项的方法,然后我可以将其添加到适配器中的相关屏幕/位置:
Preference preference = findPreference(getString(R.string.settings_key_value));
preference.setVisible(false);
然后我按如下方式使用它:
private Preference createPreference(@StringRes int title, @StringRes int key, @StringRes int summary, int order) {
final Preference preference = new Preference(getContext());
preference.setTitle(title);
preference.setKey(getString(key));
if (summary > 0) {
preference.setSummary(summary);
}
preference.setOrder(order);
return preference;
}
但是,当我这样做时,首选项标题的字体大小不正确(并且可能是首选项中的其他样式)。这可能是因为未设置首选项的属性集,并且它没有从我的应用主题继承首选项样式。有没有办法从xml正确地扩展个人首选项,以便它具有正确的样式并将其添加到我的首选项列表或修改createPreference方法,以便它将使用正确的样式?
我的AppTheme定义了以下相关属性:
final PreferenceCategory category = (PreferenceCategory) findPreference(getString(R.string.settings_category_name));
preference = createPreference(R.string.pref_title, R.string.settings_pref_key, R.string.pref_summary, 0);
category.addPreference(preference);
答案 0 :(得分:1)
使用addPreferencesFromResource为您创建动态属性的主题上下文。获取并保持以下方式:
Context styledContext;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
styledContext=getPreferenceScreen().getContext();
....
}
如果您隐藏(删除)某些属性并需要从XML支持它们,请使用以下代码行:
setPreferenceScreen(
getPreferenceManager().inflateFromResource(
styledContext,
R.xml.preferences,
null)
);
答案 1 :(得分:0)
您可以在字段中保留Preference
的引用,稍后再setVisible(true)
。
setVisible(false)
从层次结构中删除Preference
,但setVisible(true)
会将其重新添加到层次结构中。