你如何强制listPreference重置它的值?

时间:2010-12-03 19:53:05

标签: android listpreference

我有一个ListPreference,它有一个默认值,效果很好。我也有一个偏好,重置所有共享的偏好,这是非常有效的。问题是如果你回到ListPreference它仍然显示旧的值。如果您完全退出首选项并返回,则会正确显示。

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

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

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

提前致谢。

5 个答案:

答案 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);

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

class CustomListPreference extends ListPreference {
    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        // TODO setEntries
        super.onPrepareDialogBuilder(builder);
    }
}