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

       当我使用自定义loading后,当你设置setCancelable 和setCancelOutside都为false或者true是,你会发现手机上面的back事件只有在触发2次的时候才会有提示,第一次点击返回时弹出框会关闭,但是不能触发里面的back写的事件,当弹窗消失后再次点击back按钮时,你会发现back里面自己写的事件就能触发。

这就出现了dialog弹出时无法捕捉Activity的back事件

在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件:

  1)重写onKeyDown或者onKeyUp方法

  2)重写onBackPressed方法

  3)重写dispatchKeyEvent方法

设置dialog的setOnCancelListener监听:

loading.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方法

loading.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);

    }

猜你喜欢

转载自blog.csdn.net/as425017946/article/details/101016108
今日推荐