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

来源:互联网 发布:怎么在手机上装修淘宝 编辑:程序博客网 时间:2024/06/05 23:03
   public void setUserVisibleHint(boolean isVisibleToUser) {         super.setUserVisibleHint(isVisibleToUser);         if (isVisibleToUser) {             //相当于Fragment的onResume         } else {             //相当于Fragment的onPause         }     }

直接在Fragment中重写上述的方法,判断当前Fragment是否可见;(Fragment+Viewpager使用的时候)

====================================================================================================

当判断Fragment 中的 hide 和show 方法的时候回调结果是:

@Overridepublic void onHiddenChanged(boolean hidden) {// TODO Auto-generated method stubsuper.onHiddenChanged(hidden);}

====================================================================================================

当判断Fragment 中的 获取按返回键的是偶,可以使用接口回调,将按键时间传递到Fragment中,然后将是否拦截此事件的boolean返回过去

在Activity中:manuMap 是保存了对应的Fragment的实例

@Overridepublic 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);}@Overridepublic void onBackPressed() {if (isAddView) {removeView();return;}if (!mBackKeyPressed) {Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();mBackKeyPressed = true;new Timer().schedule(new TimerTask() {// 延时两秒,如果超出则取消取消上一次的记录@Overridepublic 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;}











0 0
原创粉丝点击