【问题标题】:setSummary() is not refreshed immediatelysetSummary() 不会立即刷新
【发布时间】:2014-06-23 19:17:57
【问题描述】:

我的问题是PreferenceScreen 的摘要没有立即刷新。

我在另一个PreferenceScreen 中有一个CheckBoxPreference。我正在捕捉onSharedPreferenceChanged()CheckBox 值的变化,并使用setSummary() 更改屏幕摘要。但是当我回到主要的PreferenceScreen 时,没有显示更改的摘要,只显示旧的。
我必须再次向下和向上滚动,直到它显示出来。因此,一旦它离开视野,又会焕然一新。

如何立即刷新?


我的 PreferenceActivity 的一部分:

public class AppPreferencesActivity extends android.preference.PreferenceActivity {

  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals("pref1")) {
      this.findPreference("screen2").setSummary("mySummary");
    }
  }

我的preference.xml的一部分:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    
    <PreferenceCategory android:title="Category Title">
        <PreferenceScreen android:key="screen2"
                          android:title="Screen Title">

            <CheckBoxPreference android:key="pref1"
                                android:title="Pref Title"                                
                                android:defaultValue="true" />
  </PreferenceCategory>
</PreferenceScreen>

【问题讨论】:

    标签: java android refresh preferences preferenceactivity


    【解决方案1】:

    onSharedPreferenceChanged 替换为onPreferenceChange

    public class AppPreferencesActivity extends PreferenceActivity implements OnPreferenceChangeListener {
    
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            //Set summary here
        }
    }
    

    【讨论】:

    • 我无法覆盖 PreferenceActivity 中的 onPreferenceChange。我必须将CheckBoxPreference 扩展为一个新类并将其放入preference.xml 不是吗?但是对于这么小的事情,这就是很多代码......
    • 修改AppPreferencesActivity实现OnPreferenceChangeListener然后覆盖。
    • 那也不行。我遇到了同样的问题,它不会立即刷新。
    • 我不得不使用setOnPreferenceChangeListener btw,只是覆盖不起作用。它从未被称为...
    【解决方案2】:

    这对我有用:

    BaseAdapter baseAdapter = (BaseAdapter) getPreferenceScreen().getRootAdapter();
    baseAdapter.notifyDataSetChanged();
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 2023-03-30
      • 2014-02-13
      • 2012-08-03
      • 1970-01-01
      • 2019-09-30
      • 2014-08-24
      • 2022-07-19
      • 2012-09-22
      相关资源
      最近更新 更多