public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//相当于Fragment的onResume
} else {
//相当于Fragment的onPause
}
}
直接在Fragment中重写上述的方法,判断当前Fragment是否可见;(Fragment+Viewpager使用的时候)
====================================================================================================
当判断Fragment 中的 hide 和show 方法的时候回调结果是:
@Override
public void onHiddenChanged(boolean hidden) {
// TODO Auto-generated method stub
super.onHiddenChanged(hidden);
}
====================================================================================================
当判断Fragment 中的 获取按返回键的是偶,可以使用接口回调,将按键时间传递到Fragment中,然后将是否拦截此事件的boolean返回过去:
在Activity中:manuMap 是保存了对应的Fragment的实例 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (mTabPosition) {
case EMAIL:// 拦截Fragment 点击时间
EmailFragment ef = (EmailFragment) manuMap.get(CommonContacts.EMAIL_FRAGMENT_KEY);
if (ef != null) {
boolean flag = ef.onKeyDown(keyCode, event);
if (!flag) {
return super.onKeyDown(keyCode, event);
} else {
return true;
}
}
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
if (isAddView) {
removeView();
return;
}
if (!mBackKeyPressed) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {// 延时两秒,如果超出则取消取消上一次的记录
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
} else {// 退出程序
this.finish();
}
}
在Fragment中:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == event.KEYCODE_BACK) {
MyLog.e(TAG, "KEYCODE_BACK = " + keyCode + "===" + emailHeadMenu_EmailSelect.getVisibility());
if (emailHeadMenu_EmailSelect.getVisibility() == View.VISIBLE) {
headSelectBack();
return true; // 已处理,事件分发机制拦截;true 表示拦截,吃掉当前事件。
}
}
return false;
}