PreferenceScreen,他有一些个子项目。它的Summary需要根据子项的设置来改变的,所以需要监听子项的刷新事件。
preferenceScreen.setOnPreferenceChangeListener( ) 是不管用的。
不过,它的RootAdapter在子项更新时却能够收到事件// Auto update Summary when related preference changed.
preferenceScreen.getRootAdapter().registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged()
{
super.onChanged();
// Update Summary...
}
});
哦,还有就是,收到这个事件的时候,Preference的Value已经改变了,所以就可以放心地读取新的值了。
不像setOnPreferenceChangeListener( ),在这个事件执行的时候,它的值还没有改变。虽然可以通过OnPreferenceChange的参数判断新的值,但是在某些时候还是不方便,比如需要调用一个已有的方法,而这个方法又不能接收这个新的值的时候。
Tips:这时可以使用Handler.post()方法。
参考:http://www.cnblogs.com/h46incon/p/3687781.html ;((PreferenceScreen) findPreference("screen_preference_time")).getRootAdapter().registerDataSetObserver(new DataSetObserver() {
public void onChanged(){
super.onChanged();
//String group = (String) grouppref.getSummary();
String group = (String) grouppref.getValue();//.getSummary();
//myLog.d(TAG,"getRootAdapter");
if(group.indexOf("每周")>=0){
//DaysOfWeek day = new DaysOfWeek(tuijian.week);
//weekPref.setDaysOfWeek(day);//设置星期
//weekPref.setEnabled(true);
//tixingTime = group +" "+weekPref.getSummary()+" "+ mTimePref1.getSummary();
tixingTime = group +" "+weekPref.getSummary()+" "+ mTimePref1.getSummary();
}else{
//((PreferenceGroup)findPreference("chongfu")).removePreference(findPreference("setWeek"));//这是删除 二级节点
//weekPref.setEnabled(false);
//tixingTime = group +" "+mTimePref1.getSummary();
tixingTime = group +" "+mTimePref1.getSummary();
}
//findPreference("screen_preference_time").setSummary(tixingTime);
myLog.d(TAG,"getRootAdapter:" + tixingTime);
//mscreenTime.setDefaultValue(tixingTime);
mscreenTime.setSummary(tixingTime);
}
});