栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/164343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号