分享好友 移动开发首页 频道列表

Android解决dialog弹出时无法捕捉Activity的back事件的方法

Android开发  2015-06-24 22:420

本文实例讲述了Android解决dialog弹出时无法捕捉Activity的back事件的方法。分享给大家供大家参考。具体分析如下:

在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件:

1)重写on KeyDown或者on KeyUp方法

2)重写onBackPressed方法

3)重写dispatchKeyEvent方法

这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料。

然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现。因为上述方法是重写在activity里面的,也就是说当activity是当前焦点时,它可以捕捉到相应的back键事件,而有dialog弹出时,dialog获取了当前焦点,所以activity里面的方法无法获取到back键事件,此时有两种思路:

1)设置dialog的setOnCancelListener监听:

selectDialog.setOnCancelListener(new OnCancelListener() {
  @Override
  public void onCancel(DialogInterface dialog) {
   // TODO Auto-generated method stub
   // Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();
  }
});

这样就可以捕捉到back键的事件了,当按下back键时,系统默认的操作会让dialog cancel掉,此时会触发OnCancelListener,然后在onCancel方法里面就可以实现自己想要实现的操作了。

2)设置dialog的seton KeyListener并重写dispatchKeyEvent方法

selectDialog.seton
KeyListener(new on
KeyListener() {
  @Override
  public boolean on
Key(DialogInterface dialog, int keyCode, KeyEvent event) {
   // TODO Auto-generated method stub
   if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
   {
    dialog.dismiss();
   }
   return false;
  }
});
public boolean dispatchKeyEvent(KeyEvent event)
{
 switch(event.getKeyCode())
 {
 case KeyEvent.KEYCODE_BACK:  
  Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();
  break;
 default:
  break;
 }
 return super.dispatchKeyEvent(event);
}

然后在dispatchKeyEvent里面就可以实现自己想要实现的操作了。

希望本文所述对大家的Android程序设计有所帮助。

查看更多关于【Android开发】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
SDK热更之如何在SDK代码中自动插桩及如何生成补丁包
写在前面本文是SDKHotfix相关的SDK热更系列文章中的一篇,以下为项目及系列文章相关链接:SDKHotfix整体介绍:http://blog.bihe0832.com/sdk_hotfix_project.htmlSDKHotfix对应github地址:https://github.com/bihe0832/SDKHoxFix这篇文章主要介绍一下SDK热更

0评论2017-02-05358

Supporting Multiple Screens
术语和概念Screen size 屏幕尺寸又称「屏幕大小」,是屏幕对角线的物理尺寸。单位英寸 inch,比如 Samsung Note4 是 5.7 英寸。Resolution 屏幕分辨率屏幕纵横方向上物理像素的总数,比如 Samsung Note4 是 2560x1440,表示纵向有 2560 个像素,横向有 1440

0评论2017-02-05363

AssetBundle里的Shader问题
关于Resources和AssetBundle优劣之前已经提过很多次了(参考官方教程The Resources folder),正好最近@张迪在做框架AssetBundle部分的优化,特此整理一下两个特常见的坑及对应解决办法。之前在关于Unity中的资源管理,你可能遇到这些问题里有有人提到过这个问

0评论2017-02-05610

ASimpleCache
ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。1、它可以缓存什么东西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 byte数据。2、它有什么特色?特色主要是

0评论2017-02-05376

更多推荐