安卓系统:如何拦截返回键

3

因为返回键会销毁我的应用程序并且所有数据都将丢失,所以我需要拦截它来询问用户是否真的想这样做。

我考虑了以下结构:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {    
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
        { 
         // ask user if he really wants to exit
         // no --> return true;
         // yes --> return super.onKeyDown(keyCode, event);
         //manually entering either of the return values works fine
        }   
    return super.onKeyDown(keyCode, event);
    }

我想使用警示对话框来实现“询问用户”的功能。我的问题是,虽然警示对话框被显示出来了,但是在警示对话框显示的时候,onKeyDown方法仍然继续运行到结束,并且在警示对话框中,我不知道如何告诉系统传递正确的返回值。

我想要完整的代码是:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {    
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
        { 

            alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Tile");
            alertDialog.setMessage("data lost, are you sure?");

            alertDialog.setButton(-1, getString(R.string.yes), new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                    return;
                    //I only can return without a boolean value here.                   }
            });

            alertDialog.setButton(-2, getString(R.string.no), new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                    return;
                }
            });

            alertDialog.show();
        }   
        return super.onKeyDown(keyCode, event);
    }

感谢,A。

删除 return super.onKeyDown(keyCode, event); - motoku
2个回答

3

当用户按下返回键时,您的对话框就会出现。

现在已经处理了onKeyDown事件,所以您需要返回true。

您的对话框现在正在显示,

当您按下“是”时,您想模拟返回按钮的功能,这就是finish()的作用。

当您按下“否”时,只需关闭对话框即可继续进行活动。

您需要这个:

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event)  
{    
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    { 

        alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("Tile");
        alertDialog.setMessage("data lost, are you sure?");

        alertDialog.setButton(-1, getString(R.string.yes), new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {
                finish(); // or yourContext.finish();
                //I only can return without a boolean value here.                   
            }
        });

        alertDialog.setButton(-2, getString(R.string.no), new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {
                // do nothing dialog will dismiss
            }
        });

        alertDialog.show();
        return true; //meaning you've dealt with the keyevent
    }   
    return super.onKeyDown(keyCode, event);
}

0

应该在“否”按钮的onClick中调用alertDialog.show();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接