【ActivityGroup】中按键监听失灵!

来源:互联网 发布:阿里云系统升级 编辑:程序博客网 时间:2024/04/27 14:29

很多朋友都用ActivityGroup 来做底部菜单吧~

我也觉得这个控件很好,自由性比tab好很多。但是确实发现了很多问题:

 

1.子页面activity的menu不显示。(子页面的按键监听无输出,所以其他按键也无效!)

2. 子页面默认wrap_content布局,无法设置为fill_parent!需根据页面大小动态设置!(这里参考另一篇:http://androidturing.iteye.com/blog/1258839

3.子页面中的ListView的getView()方法被重复调用多次!导致性能下降。(同样参考:http://androidturing.iteye.com/blog/1258839

之前第二个问题已经解决,第三个问题是由于第二个问题中 子页面纵向布局为wrap_content而引起的!

 

今天发现并解决了第一个bug,在activitygroup加上这个:

 

Java代码  收藏代码
  1. @Override  
  2.    public boolean onKeyUp(int keyCode, KeyEvent event) {  
  3.         
  4.        if(keyCode==KeyEvent.KEYCODE_MENU) {  
  5.             
  6.            this.getLocalActivityManager().getCurrentActivity().openOptionsMenu();  
  7.        }else if(keyCode == KeyEvent.KEYCODE_BACK){  
  8.             
  9.            finish();//可换用自己的退出提示  
  10.        }  
  11.         
  12.        return super.onKeyDown(keyCode, event);  
  13.    }  
Java代码  收藏代码
  1. @Override  
  2.    public boolean onKeyUp(int keyCode, KeyEvent event) {  
  3.         
  4.        if(keyCode==KeyEvent.KEYCODE_MENU) {  
  5.             
  6.            this.getLocalActivityManager().getCurrentActivity().openOptionsMenu();  
  7.        }else if(keyCode == KeyEvent.KEYCODE_BACK){  
  8.             
  9.            finish();//可换用自己的退出提示  
  10.        }  
  11.         
  12.        return super.onKeyDown(keyCode, event);  
  13.    }  

 

ActivityGroup中监听返回按键

如果你想使用ActivityGroup来统一管理Activity的话,当然首先这是一种很好的方法,但是如果你想在ActivityGroup里面拦截返回按键来进行统一管理的话,直接覆写onKeyDown方法是行不通的了哦,但是你可以覆写dispatchKeyEvent方法来实现,例如,现在我点击返回按钮要提示是否退出程序,代码如下:

@Override   public boolean dispatchKeyEvent(KeyEvent event) {   if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {   AlertDialog.Builder builder = new AlertDialog.Builder(this);   builder.setTitle("提示");   builder.setMessage("您确定要退出吗?");   builder.setPositiveButton("退出",   new DialogInterface.OnClickListener() {      @Override   public void onClick(DialogInterface dialog, int which) {   // 退出程序   Intent exitIntent = new Intent(Intent.ACTION_MAIN);   exitIntent.addCategory(Intent.CATEGORY_HOME);   startActivity(exitIntent);   YeedoUIActivity.this.finish();   }   });   builder.setNegativeButton("取消", null);   builder.show();   return true;   }   return super.dispatchKeyEvent(event);   }


原创粉丝点击