我有一个PreferenceActivity2级树的PreferenceScreens,类似于:
<PreferenceScreen>
<PreferenceScreen android:key="A">
<ListPreference/>
<EditTextPreference/>
</PreferenceScreen>
<PreferenceScreen android:key="B">
<ListPreference/>
<EditTextPreference/>
</PreferenceScreen>
...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
每个较低级别的偏好屏幕,例如A和B,正在收集两个相关的数据.我希望这些父项的摘要是两个子首选项的当前值的组合.
我尝试在叶子首选项上添加onPreferenceChangeListener并从那里更新摘要,但似乎没有.首选项都是在活动中以编程方式创建的,所以我在onCreate中做了类似的事情:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
然后我试图找到一个位置,我可以通知我已经从子页面返回到顶级首选项屏幕,以便我可以在此时更新.但是,我对如何显示下级屏幕感到困惑.看起来它们实际上是对话框,而不是完整的活动,因为onPause/onResume在它们之间移动时不会被调用.在返回顶级页面时,是否有一些我遗漏的方法会被调用?
我也尝试添加一个sharedPreferenceChangeListener,如所描述这里,但似乎从来没有被调用.
任何人都对我在这里缺少的东西有任何暗示,或者我错过的任何更简单的方法?
jmb*_*ard 12
我有同样的问题,似乎在更改摘要后调用Activity.onContentChanged()更正了我的问题.
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
// Update summary value
EditTextPreference pref = (EditTextPreference)findPreference(key);
pref.setSummary(pref.getText());
this.onContentChanged();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7270 次 |
| 最近记录: |