PreferenceScreen监听子项的刷新

    xiaoxiao2021-03-25  56

    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); } });  
    转载请注明原文地址: https://ju.6miu.com/read-32816.html

    最新回复(0)