首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PreferenceActivity更新摘要

PreferenceActivity更新摘要
EN

Stack Overflow用户
提问于 2011-01-11 09:14:15
回答 4查看 7.5K关注 0票数 8

我有一个包含两级PreferenceScreen树的PreferenceActivity,类似于:

代码语言:javascript
复制
<PreferenceScreen>
  <PreferenceScreen android:key="A">
     <ListPreference/>
     <EditTextPreference/>
  </PreferenceScreen>
  <PreferenceScreen android:key="B">
     <ListPreference/>
     <EditTextPreference/>
  </PreferenceScreen>
  ...
</PreferenceScreen>

每个较低级别的偏好屏幕,例如A和B,正在收集两条相关的数据。我希望这些父项的摘要是两个子首选项的当前值的组合。

我尝试在叶子首选项上添加onPreferenceChangeListener,并从那里更新摘要,但似乎不起作用。首选项都是在activity中以编程方式创建的,所以我在onCreate中执行如下操作:

代码语言:javascript
复制
   leafListPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
       @Override
       public boolean onPreferenceChange(Preference preference, Object newValue) {
              // do some work
              prefScreenA.setSummary( /* get new summary based on newValue */);
              return true;
       }
  });

然后我试着找到一个位置,在那里我可以被告知我已经从子页面返回到顶级首选项屏幕,以便我可以在该位置进行更新。然而,我对低级屏幕是如何显示的感到困惑。看起来它们实际上是对话框,而不是完整的活动,因为在它们之间移动时不会调用onPause/onResume。有没有什么方法是我遗漏的,在返回到顶层页面时会被调用?

我还尝试添加一个sharedPreferenceChangeListener,就像here所描述的那样,但似乎从未被调用过。

有没有人对我这里缺少的东西有任何提示,或者有什么更简单的方法我没有?

EN

回答 4

Stack Overflow用户

发布于 2011-04-06 06:36:50

我也遇到了同样的问题,似乎在摘要更改后调用Activity.onContentChanged()可以纠正我的问题。

代码语言:javascript
复制
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
  // Update summary value
  EditTextPreference pref = (EditTextPreference)findPreference(key);
  pref.setSummary(pref.getText());
  this.onContentChanged();
}
票数 12
EN

Stack Overflow用户

发布于 2016-09-20 23:04:44

经过一系列愚蠢的尝试和错误之后,我终于在another SO answer中找到了答案。这是一条神奇的路线:

代码语言:javascript
复制
((BaseAdapter)getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();

把它放到你的首选监听器中,然后你就可以开始了。

票数 1
EN

Stack Overflow用户

发布于 2013-02-07 17:16:10

使用以下代码并重写onContentChanged()

代码语言:javascript
复制
   public class SettingsActivity extends PreferenceActivity
    {
         @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            setContentView(R.layout.settings_layout);


            }

@Override
    public void onContentChanged() {
        // put your code here
        super.onContentChanged();
    }

}

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4653264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档