有个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()方法。

04-30 10:26