Android TabActivity中onKeyDown无效问题
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK)
{
new AlertDialog.Builder(LoginActivity.this).setTitle("提示")
.setMessage("确认退出吗?")
.setIcon(R.drawable.icon)
.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
android.os.Process.killProcess(android.os.Process.myPid()); // 结束进程
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
}
})
.show();
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
}
此时在 TabActivity无法监听keyevent,onKeyDown冲突了。
解决办法:
1.当继承TabActivity时,同学们是不是onKeyDown方法没用,那是应为冲突了,可以用dispatchKeyEvent方法
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0&&event.getAction() == KeyEvent.ACTION_DOWN ) {
new AlertDialog.Builder(MainActivity.this).setTitle("提示")
.setMessage("确认退出吗?")
.setIcon(R.drawable.icon)
.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
new RequestCommandService().logoutReq();
android.os.Process.killProcess(android.os.Process.myPid()); // 结束进程
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
}
})
.show();
return false;
}
return super.dispatchKeyEvent(event);
}
可以解决问题,能监听到keyEvent事件,但会监听二次,弹出二个AlertDialog。
因此在if判断需要添加event.getAction() == KeyEvent.ACTION_DOWN就OK了
2.也可以到TabActivity的子Activity用onKeyDown
3.当有双重TabActivity时可以用
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
TouchListenerUtils.Back(this.getParent().getParent());//getParent().是指父类
return false;
}else{
return super.onKeyDown(keyCode, event);
}
}

Android TabActivity中onKeyDown无效问题的更多相关文章
- Android Studio中删除无效的字符串资源
1.定位到当前项目中的strings.xml文件 1.菜单栏找到"Analyze"->"Run Inspection By Name..."->输入 ...
- Android查缺补漏(View篇)--自定义 View 中 wrap_content 无效的解决方案
自定义 View 中 wrap_content 无效的解决方案 做过自定义 View 的童鞋都会发现,直接继承 View 的自定义控件需要重写 onMeasure() 方法,并设置 wrap_cont ...
- Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder
Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...
- [原创]Android系统中常用JAVA类源码浅析之HashMap
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...
- android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效
android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效 在之前的版本中都是在Man ...
- Android Tv 中的按键事件 KeyEvent 分发处理流程
这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...
- Android ListView setOnItemClickListener/setOnItemSelectedListener,无效
在Android 开发中,有时候我们在设置,LIstview,GridView,这些View的时候,再给他们设置:setOnItemClickListener/setOnItemSelectedLis ...
- android布局中使用include及需注意点
在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题: 一.使用include引入 如现有标题栏布局block_header ...
- (转载)你真的理解Android AIDL中的in,out,inout么?
前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了——或者并没有,但所占篇幅甚小,且基本上都是 ...
随机推荐
- 求教——使用node做表单,刷新浏览器页面,浏览器为什么会重复提交上次所填的信息
最近在学些node,按照<nodejs实战>上的代码做练习,发现有表单重复提交的问题 第一次打开页面,显示如图是get请求 图1 现在我们提交aaa,显示如图,post请求 图2 刷新页面 ...
- SQLSERVER truncate table之后是否会重置表的自增值
SQLSERVER truncate table之后是否会重置表的自增值 今天清理业务库数据的时候,开发人员说可以使用truncate table把两个表的所有数据清理掉 这两个表都有自增ID,都做了 ...
- IIS负载均衡
工具下载链接 http://www.iis.net/downloads/microsoft/application-request-routing#additionalDownloads
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化
最近花了一点时间,阅读了IdentityServer的源码,大致了解项目整体的抽象思维.面向对象的重要性; 生产环境如果要使用 IdentityServer3 ,主要涉及授权服务,资源服务的部署负载的 ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
- Maven学习总结(一副本)——Maven配置和搭建
环境准备: JDK 1.6 Maven 3.0.4 myeclipse 8.6.1 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版 ...
- PHP基础(一)
<?php $expression = false; if($expression == true): ?> <p>This will show if the expressi ...
- 关于多线程与CRITICAL_SECTION的使用
CRITICAL_SECTION 只能针对多线程进行锁定,在同一个线程中,是可以进入很多次的. 同一线程可以多次进入临界区. 在测试程序(多线程同时访问CADOAccess类的对象)中,辅助线程不论是 ...
- Anywhere服务建立及连接步骤
<烟叶自动化收购管理系统(山东版)>服务端程序为<烟站综合管理系统5.0>,5.0使用的数据库为Anywhere,设置方法如下: 建立anywhere服务连接步骤 服务 ...
- 15系统函数&数据类型转换(必学)-大话数据库视频教程
大纲:系统函数的用法,case...when的用法,cast关键字的用法,convert的用法 优酷超清地址: 腾讯超清地址: 百度网盘下载地址:http://pan.baidu.com/s/1dDe ...