设置了一个Dialog当按返回键时用Dialog的setOnKeyListener捕捉返回键,LogCat的时候发现这个监听事件执行了两次,这是怎么回事,是它本身就执行两次吗,还是其它的原因造成的?

解决方案 »

  1.   

    mBuildDialogList.setOnKeyListener(new OnKeyListener() {
        
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
         // TODO Auto-generated method stub
         if (keyCode == KeyEvent.KEYCODE_BACK) {
          if (mBuildSlidingDrawer.isOpened()) {
           mBuildSlidingDrawer.close();
          } else if (mBuildDialogList.isShowing()) {
           mBuildDialogList.dismiss();
          }
         }
         Log.d("mBuildDialogList",getSystemDate()+"");
         return false;
        }
       });mBuildDialogList是一个Dialog,是在另一个Dialog内又弹出的一个,mBuildSlidingDrawer是mBuildDialogList内的一个抽屉控件,相实现抽屉控件上拉后通过返回键关闭抽屉控件,显示mBuildDialogList的界面,可是按下返回键setOnKeyListener监听事件执行了两次,连带着mBuildDialogList也关了,各位帮帮忙看看
      

  2.   

    把eclipse关掉,重开一遍,有可能是工具问题,我也遇到过,重开运行就好了
      

  3.   

    额,看错了,我遇到的是logcat打印两遍,和你的不一样
      

  4.   

    Android一次单击操作定义了两个事件,ACTION_DOWN和ACTION_UP,即按下和松手两个动作。
      

  5.   

    我碰到过这样的问题,的确是执行两次的,为了避免执行两次,你可以试试传说中的PV操作,也就是加个锁 平时锁开着,有人执行了就关了 别人就做不了了,这个人完事了以后再打开锁就OK
      

  6.   

    感觉7楼是正解。除了判断是什么按键被按下,还应该判断按键是up还是down
      

  7.   

    调用event.getAction()方法可以得到键盘的action:ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
      

  8.   

    if(event.getAction()==KeyEvent.ACTION_DOWN)或者if(event.getAction()==KeyEvent.ACTION_UP)做一次判断就OK了