1

下面的警报对话框要求我单击我单击两次以关闭对话框窗口的任何按钮,经过一个小时的谷歌搜索,我找不到答案。我确信它正盯着我的脸,但我就是看不到它。

编辑:更多搜索使我相信对话框实际上打开了两次,并且发生在这里:asset_id_text_view.setOnTouchListener(new OnTouchListener() { @Override 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

4 回答 4

3

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

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

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

用于dialog.dismiss()您的解决方案

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

请参考以上链接进行进一步查询。

于 2013-08-30T11:46:21.183 回答
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;
    }
    });
于 2013-08-30T13:37:12.197 回答
0

您可以调用按钮关闭对话框dialog.dismiss()OnClickListener

于 2013-08-30T11:43:01.460 回答
0

采用dialog.dismiss();

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

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

            }
        });
于 2013-08-30T11:43:10.383 回答