Fragment:判断是否显示当前Fragment viewpager ;Fragment监听按键点击事件;显示隐藏事件

   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;
	}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值