Fragment 顯示隱藏回撥
阿新 • • 發佈:2019-02-05
今天來說一下Fragment的顯示隱藏的回撥 和 如何拿到當前activity 正在顯示的Fragment物件;
fragment顯示隱藏無非兩種控制方式:
1.在viewpager 中顯示左右滑動顯示隱藏;
2.利用FragmentTransation 的show 和 hide顯示隱藏;
1.在viewpager中顯示:
新建一個BaseFragment,在BaseFragment 中新增以下程式碼就可以實現:
//標記需要等待回撥onMyResume;
private boolean isWaitingForOnMyResume = false;
@Override
public void onResume() {
super.onResume();
if (isWaitingForOnMyResume) {
isWaitingForOnMyResume = false;
onMyResume();
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Logger.d(TAG, "setUserVisibleHint" + toString() + "; isVisibleToUser:" + isVisibleToUser);
if (isVisibleToUser) {
if (isResumed()) {
onMyResume();
} else {
isWaitingForOnMyResume = true;
}
} else {
if (isResumed())
onMyPause();
}
}
/**
* viewPager中介面每次可見呼叫;
*/
public void onMyResume() {
mBaseActivity.currentShowingFragment = this;//在BaseActivity 中維護的一個變數,表示當前Activity 顯示的Fragment(viewpager 中滑動 方式);
Log.d(TAG, "onMyResume" );
}
/**
* viewPager中介面每次不可見呼叫;
*/
public void onMyPause() {
Log.d(TAG, "onMyPause" );
}
2.手動呼叫show hide顯示:
依然在BaseFragment 中新增以下程式碼就可以實現: (這個比較簡單。但是這種方式有個問題是: 第一次show的時候 不會呼叫onMyShow(); 大家儘管發揮 完善這個問題;)
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (hidden) {
onMyHide();
} else {
onMyShow();
}
}
// FragmentTransaction 呼叫show 回撥
protected void onMyShow() {
Log.d(TAG, "onMyShow");
mBaseActivity.currentShowingFragment2 = this;//在BaseActivity 中維護的一個變數,表示當前Activity 顯示的Fragment (hide show 方式);
}
// FragmentTransaction 呼叫hide 回撥
protected void onMyHide() {
Log.d(TAG, "onMyHide");
}