为什么我总是必须按两次警告对话框按钮来关闭对话框?

时间:2013-08-30 11:39:41

标签: android onclick alertdialog

以下警告对话框要求我点击我点击两次的按钮才能关闭对话窗口,经过一个小时的谷歌搜索后,我找不到答案。我确信它正盯着我,但我却看不到它。

编辑:更多的搜索让我相信对话框实际上已经打开了两次,它在这里发生: asset_id_text_view.setOnTouchListener(new OnTouchListener(){             @覆盖             public boolean onTouch(View v,MotionEvent event){

            showAssetIDDialog();
            return true;
        }

    });

编辑:从dialog.dismiss()开始;和一些谷歌搜索建议尝试dialog.cancel();这对我来说都不成功。

public void showAssetIDDialog() {
    // TODO Auto-generated method stub
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            CreateTicketActivity.this);

    // set title
    alertDialogBuilder.setTitle("Enter Asset ID");

    alertDialogBuilder.setCancelable(true).setMessage(
            "How would you like to proceed?");
    alertDialogBuilder.setPositiveButton("Enter text",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //enterTextDialog();
                    dialog.cancel();        

                }
            });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
}

4 个答案:

答案 0 :(得分:3)

cancel() - 取消对话框。这与调用dismiss()基本相同,但它也会调用DialogInterface.OnCancelListener(如果已注册)。

只需取消()将取消在DialogInterface上注册的监听器。

dismiss() - 关闭此对话框,将其从屏幕上删除。可以从任何线程安全地调用此方法。请注意,在关闭对话框时不应该覆盖此方法以进行清理,而是在onStop()中实现该方法。

使用dialog.dismiss()作为解决方案

http://developer.android.com/guide/topics/ui/dialogs.html#DismissingADialog

请参阅以上链接以获取进一步查询。

答案 1 :(得分:1)

所以看起来问题确实在于OnTouchListener

代码正在执行我要求它做的事情,那就是每次有一个motionEvent时打开一个AlertDialog。每次触摸至少需要2次

通过包含一个switch语句,我只能在屏幕被按下时触发alertDialog的打开,而不是在屏幕被释放时触发,如下所示:

    asset_id_text_view.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                showAssetIDDialog();
                break; 
            default: 
                break;
    }
    });

答案 2 :(得分:0)

您可以在按钮的dialog.dismiss()中拨打OnClickListener以关闭对话框。

答案 3 :(得分:0)

使用dialog.dismiss();

  

关闭此对话框,将其从屏幕上删除。这种方法可以   从任何线程安全地调用。

alertDialogBuilder.setPositiveButton("Enter text",new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                //enterTextDialog();
                 dialog.dismiss();        

            }
        });