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

 更新时间:2016年11月27日 16:41:44   作者:海 子  
这篇文章主要介绍了Android 解决dialog弹出时无法捕捉Activity的back事件问题的相关资料,需要的朋友可以参考下

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

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

  1)重写onKeyDown或者onKeyUp方法

  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的setOnKeyListener并重写dispatchKeyEvent方法

selectDialog.setOnKeyListener(new OnKeyListener() {
        
        @Override
        public boolean onKey(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中使用IntentService创建后台服务实例

    Android中使用IntentService创建后台服务实例

    这篇文章主要介绍了Android中使用IntentService创建后台服务实例,IntentService提供了在单个后台线程运行操作的简单结构,需要的朋友可以参考下
    2014-06-06
  • Android编程将Activity背景设置为墙纸的简单实现方法

    Android编程将Activity背景设置为墙纸的简单实现方法

    这篇文章主要介绍了Android编程将Activity背景设置为墙纸的简单实现方法,涉及Android简单的属性设置及XML配置修改等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android自定义控件实现带文字提示的SeekBar

    Android自定义控件实现带文字提示的SeekBar

    这篇文章主要给大家介绍了关于Android自定义控件实现带文字提示的SeekBar的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Android BottomSheetDialog实现底部对话框的示例

    Android BottomSheetDialog实现底部对话框的示例

    这篇文章主要介绍了Android BottomSheetDialog实现底部对话框的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Android自定义ScrollView实现放大回弹效果

    Android自定义ScrollView实现放大回弹效果

    这篇文章主要为大家详细介绍了Android自定义ScrollView实现放大回弹效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 一文带你看懂Android Application启动流程是怎样的

    一文带你看懂Android Application启动流程是怎样的

    谈到Android Application的启动流程,很多文章都是各种源码类和方法的一堆调用关系,这样的文章就算看一百遍,也只是云里雾里。源码得看,但是最好不要一下子深陷到源码的细节之中,不可自拔。这里站在前人的基础之上做一个总结
    2021-10-10
  • Android实现多维商品属性SKU选择

    Android实现多维商品属性SKU选择

    这篇文章主要为大家详细介绍了Android实现多维商品属性SKU选择,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • android 仿微信demo——登录功能实现(移动端)

    android 仿微信demo——登录功能实现(移动端)

    本篇文章主要介绍了微信小程序-阅读小程序实例(demo),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能给你们提供帮助
    2021-06-06
  • Android Studio gradle配置packagingOptions打包so库重复

    Android Studio gradle配置packagingOptions打包so库重复

    这篇文章主要为大家介绍了Android Studio gradle配置packagingOptions打包so库重复问题的解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android简单记录和恢复ListView滚动位置的方法

    Android简单记录和恢复ListView滚动位置的方法

    这篇文章主要介绍了Android简单记录和恢复ListView滚动位置的方法,涉及Android针对ListView位置属性的相关操作技巧,需要的朋友可以参考下
    2016-08-08

最新评论