我有一个ListPreference,它有一个默认值,效果很好。我也有一个偏好,重置所有共享的偏好,这是非常有效的。问题是如果你回到ListPreference它仍然显示旧的值。如果您完全退出首选项并返回,则会正确显示。
所以问题是如何强制ListPreference使用正确的值?其他所有的偏好似乎都很好。
我确实找到了解决方法,但我对它不满意,因为它对我来说似乎很脏。当用户点击重置时,重置值后,我自己将值设置为已经设置的值。
( (ListPreference) findPreference( myListKey ) ).setValue( String.valueOf( DEFAULT_VALUE ) );
提前致谢。
答案 0 :(得分:1)
我知道它已经很晚了,但也许其他人绊倒这可能会发现它很有用。
Preference reset = (Preference) findPreference("reset");
reset.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
// TODO Auto-generated method stub
preference.getEditor().clear().commit();
Toast.makeText(getBaseContext(),
"Restored to default settings", Toast.LENGTH_SHORT)
.show();
return false;
}
});
答案 1 :(得分:1)
Azizi Musa正在做点什么,但是null会抛出异常。
然而,这有效:
ListPreference yeeha = (ListPreference) findPreference ("yeeha");
yeeha.setValue("");
答案 2 :(得分:0)
我认为您应该从ListPreference覆盖onSetInitialValue方法。 像这样。
公共类CustomListPreference扩展了ListPreference {
protected void onSetInitialValue(boolean restoreValue,Object defaultValue){
//当它与你的选项值相关时 如果(restoreValue){
}否则{ //将其设置为defautlValue
}
}
}
答案 3 :(得分:0)
ListPreference pref = (ListPreference) findPreference ("yeeha");
pref.setValue(null);
答案 4 :(得分:0)
我在 ListPreference 中设置类别列表时遇到了类似的问题。问题是您无法通过 setEntries 方法更改对话框中的可见选项(单击侦听器中的设置条目为时已太晚)。
我的解决方案是添加 DrawerListener ,告诉我的PreferenceFragment什么时候应该无效。
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager().
findFragmentById(R.id.fragment_drawer);
mDrawerOptions = new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
fragment.onOpened();
}
};
mDrawerLayout.addDrawerListener(mDrawerOptions);
另一个解决方案是覆盖 onPrepareDialogBuilder 方法,该方法会在准备对话框之前设置条目。
class CustomListPreference extends ListPreference {
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
// TODO setEntries
super.onPrepareDialogBuilder(builder);
}
}