【问题标题】:How do you force a listPreference to reset it's value?你如何强制 listPreference 重置它的值?
【发布时间】:2011-05-19 23:00:42
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: android listpreference


    【解决方案1】:
    ListPreference pref = (ListPreference) findPreference ("yeeha");
    
    pref.setValue(null);
    

    【讨论】:

      【解决方案2】:

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

      但是这行得通:

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

      【讨论】:

        【解决方案3】:

        我在 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);
            }
        }
        

        【讨论】:

          【解决方案4】:

          我知道它已经晚了,但也许其他人偶然发现它可能会发现它很有用。

          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;
                  }
              });
          

          【讨论】:

          • @user1780619 对我根本不起作用 - 它不会清除列表选择
          【解决方案5】:

          我认为你应该重写 ListPreference 中的 onSetInitialValue 方法。 像这样。

          公共类 CustomListPreference 扩展 ListPreference{

          protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {

          //当它已经初始化或不是你的选项值时 如果(恢复值){

          }其他{ //设置为默认值

          }

          }

          }

          【讨论】:

            猜你喜欢
            • 2011-07-09
            • 1970-01-01
            • 2011-05-20
            • 1970-01-01
            • 2010-09-15
            • 2015-10-28
            • 2010-11-16
            • 1970-01-01
            • 2018-08-21
            相关资源
            最近更新 更多