今天来说一下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");
}