@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无效问题的更多相关文章

  1. Android Studio中删除无效的字符串资源

    1.定位到当前项目中的strings.xml文件 1.菜单栏找到"Analyze"->"Run Inspection By Name..."->输入 ...

  2. Android查缺补漏(View篇)--自定义 View 中 wrap_content 无效的解决方案

    自定义 View 中 wrap_content 无效的解决方案 做过自定义 View 的童鞋都会发现,直接继承 View 的自定义控件需要重写 onMeasure() 方法,并设置 wrap_cont ...

  3. Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder

    Stack Overflow 排错翻译  - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...

  4. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  5. android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效

    android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效    在之前的版本中都是在Man ...

  6. Android Tv 中的按键事件 KeyEvent 分发处理流程

    这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...

  7. Android ListView setOnItemClickListener/setOnItemSelectedListener,无效

    在Android 开发中,有时候我们在设置,LIstview,GridView,这些View的时候,再给他们设置:setOnItemClickListener/setOnItemSelectedLis ...

  8. android布局中使用include及需注意点

    在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题: 一.使用include引入 如现有标题栏布局block_header ...

  9. (转载)你真的理解Android AIDL中的in,out,inout么?

    前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了——或者并没有,但所占篇幅甚小,且基本上都是 ...

随机推荐

  1. Extjs的GridPanel的RowExpander的扩展

    对Extjs的grid使用,有时候单单使用其中的某些组.或某些行是远远不够的,还需要对行进行一些扩展,如:与filters相似的row扩展控件,如下 这个控件,我也是从网上找的小例子,按照其内部的某些 ...

  2. 解决修改密码报错‘passwd:Authentication token’

     1.修改密码时报错: 错误信息:'passwd: Authentication token manipulation error' [root@localhost test]# ' | passwd ...

  3. 【概念笔记】JavaEE - web part2

    IT`huhui前言录 续JavaEE - web part1 链接http://www.cnblogs.com/ithuhui/p/5930745.html, 持续修改更新. Cookie 1. 定 ...

  4. redis linux安装与简单集群配置

    由于项目原因最近在使用redis,把redis的安装以及配置记录下来方便查看. 1.下载 地址http://download.redis.io/releases/  需要哪个版本就使用那个版本 2.解 ...

  5. 开发笔记:用不用UnitOfWork以及Repository返回什么集合类型

    这2天实际开发中明确的东西,在这篇博文中记录一下. 之前对是否需要自己封装UnitOfWork有些犹豫,因为Entity Framework就是一个UnitOfWork实现, 自己再封装一下显得有些多 ...

  6. VR介绍

    VR(Virtual Reality,即虚拟现实,简称VR),是由美国VPL公司创建人拉尼尔在20世纪80年代初提出的.其具体内涵是:综合利用计算机图形系统和各种现实及控制等接口设备,在计算机上生成的 ...

  7. Shell 判断

    1  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of co ...

  8. [ACM_模拟][ACM_数学] LA 2995 Image Is Everything [由6个视图计算立方体最大体积]

    Description   Your new company is building a robot that can hold small lightweight objects. The robo ...

  9. [游戏学习23] MFC 画尺子

    >_<:这是个简单的MFC程序,有利于了解MFC的框架结构 >_<:Ruler.h #include<afxwin.h> class CMyApp:public C ...

  10. MATLAB实现将图像转换为素描(简笔画)风格

    代码: colorgrad.m function [VG, A, PPG] = colorgrad(f, T) ) || (size(f,)~=) error('Input image must be ...