5

我有一个 ListPreference,它有一个默认值,而且效果很好。我还有一个偏好,可以重置所有共享偏好,效果很好。问题是,如果您返回 ListPreference,它仍然显示旧值。如果您完全退出首选项并返回,它会正确显示。

所以问题是如何强制 ListPreference 使用正确的值?其他所有偏好似乎都运行良好。

我确实找到了解决方法,但我对它不满意,因为它对我来说似乎很脏。当用户单击重置时,在重置值后,我自己将值设置为已经设置的值。

( (ListPreference) findPreference( myListKey ) ).setValue( String.valueOf( DEFAULT_VALUE ) );

提前致谢。

4

5 回答 5

3

Azizi Musa 正在做某事,但 null 会抛出异常。

然而,这有效:

ListPreference yeeha = (ListPreference) findPreference ("yeeha");

yeeha.setValue("");
于 2017-06-19T15:36:39.993 回答
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;
        }
    });
于 2012-10-28T10:37:43.517 回答
1
ListPreference pref = (ListPreference) findPreference ("yeeha");

pref.setValue(null);
于 2014-06-24T14:20:45.660 回答
0

我认为您应该覆盖 ListPreference 中的 onSetInitialValue 方法。像这样。

公共类 CustomListPreference 扩展 ListPreference{

protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {

//当它已经初始化或不是你的选项值时 if(restoreValue){

}else{ //设置为默认值

}

}

}

于 2011-02-13T12:53:05.090 回答
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);

另一种解决方案是覆盖onPrepareDialogBu​​ilder方法,该方法将在准备对话框之前设置条目。

class CustomListPreference extends ListPreference {
    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        // TODO setEntries
        super.onPrepareDialogBuilder(builder);
    }
}
于 2016-03-28T20:13:25.033 回答