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

 更新时间:2015年05月28日 10:11:01   作者:海 子  
这篇文章主要介绍了Android解决dialog弹出时无法捕捉Activity的back事件的方法,涉及Android操作Activity事件的相关技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • android 解决ViewPager加载大量图片内存溢出问题

    android 解决ViewPager加载大量图片内存溢出问题

    本篇文章是介绍 android 解决ViewPager加载大量图片内存溢出问题,并附有代码实例,希望能帮到有需要的小伙伴
    2016-07-07
  • android 使用Xml文件定义Shape方式

    android 使用Xml文件定义Shape方式

    这篇文章主要介绍了android 使用Xml文件定义Shape方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android实现无限循环滚动弹幕的代码示例

    Android实现无限循环滚动弹幕的代码示例

    这篇文章主要介绍了android实现无限循环滚动的弹幕
    ,文中通过代码示例讲解的非常详细,对大家实现循环弹幕有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • Android StepView实现物流进度效果

    Android StepView实现物流进度效果

    这篇文章主要为大家详细介绍了Android StepView实现物流进度效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android快速实现无预览拍照功能

    Android快速实现无预览拍照功能

    这篇文章主要为大家详细介绍了Android快速实现无预览拍照功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android中使用Kotlin实现一个简单的登录界面

    Android中使用Kotlin实现一个简单的登录界面

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。接下来本文通过实例代码给大家讲解Android中使用Kotlin实现一个简单的登录界面,一起看看吧
    2017-09-09
  • Android Studio 当build时候出错解决办法

    Android Studio 当build时候出错解决办法

    这篇文章主要介绍了 Android Studio在build的时候出现transformClassesWithDexForDebug错误解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android 获取手机已安装的应用列表实现详解

    Android 获取手机已安装的应用列表实现详解

    这篇文章主要介绍了Android 获取手机已安装的应用列表的实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 深入理解Android中的xmlns:tools属性

    深入理解Android中的xmlns:tools属性

    关于xmlns:tools属性的介绍网上有很多,小编觉得有必要整理一篇介绍较为详细的内容给大家,下面这篇文章就很深入的介绍了关于Android中的xmlns:tools属性,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Android使用ScrollView实现滚动效果

    Android使用ScrollView实现滚动效果

    这篇文章主要为大家详细介绍了Android使用ScrollView实现滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01

最新评论