由于項目中有好多數據的變化,導致對應的界面需要改變,在踩了N次坑之后,特此記錄。
情況一:在主頁面,Fragment通過底部的RadioButton切換的時候,Fragment的刷新
一般,在主頁面切換Fragment是通過調用 show() 和 hide() 方法(本文只討論以這種方法為前提,因為其他的方法沒怎么用過,哈哈!)
在執(zhí)行 show() 和 hide() 方法的時候,會回調一個方法:
通過這個方法來設置相應的UI和數據變化。(注意,該方法只在你進行Fragment切換的時候執(zhí)行(也就是執(zhí)行了show和hide方法之后執(zhí)行,不要以為這是類似onResume方法啊!))
/**
* 當前fragment的show和hide方法時候調用(在fragment第一次創(chuàng)建的時候不會執(zhí)行)
*
* @param hidden
*/
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (hidden) {
//隱藏
} else {
//顯示
}
}
情況二:在Fragmetn頁面中,跳轉到Activity或者其他頁面,返回到Fragment頁面的刷新
這種情況刷新方式就很多了。
方法1:使用生命周期
思路:設置一個變量,在onCreateView的時候,設置為true,在onResume的時候,先判斷,然后執(zhí)行對應的方法,最后將該變量設置為false。舉例如下:
//是否第一次加載
private boolean isFirstLoading = true;
/**
* 在fragment可見的時候,刷新數據
*/
@Override
public void onResume() {
super.onResume();
if (!isFirstLoading) {
//如果不是第一次加載,刷新數據
updateUI();
}
isFirstLoading = false;
}
改進:可以將這個方法設置在BaseFragmetn中,將上面代碼中的updateUI方法做一個抽象方法,只要用戶繼承就可以。
方法2:使用事件總線:EventBus、RxBus.....
這個這里就不舉例了,網上一大堆,也挺好用的。
方法3:使用本地廣播進行通知
我感覺這個應該也可以的,但是沒有用。