Android:AlertDialog显示两次而不是一次

Android:AlertDialog显示两次而不是一次,android,alert,Android,Alert,我有一个android应用程序,当用户触摸或单击EditText时,EditText的内容显示在AlertDialog中。我添加了一个done按钮,但是警报对话框不会关闭。我必须按两次“完成”按钮。我不知道为什么会发生这种情况,有谁能提出一个比烤面包更好的选择吗 编码部分: 我在触摸屏上调用以下功能 public void setalert() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(

我有一个android应用程序,当用户触摸或单击
EditText
时,
EditText
的内容显示在
AlertDialog
中。我添加了一个done
按钮
,但是
警报对话框
不会关闭。我必须按两次“完成”按钮。我不知道为什么会发生这种情况,有谁能提出一个比烤面包更好的选择吗

编码部分: 我在触摸屏上调用以下功能

public void setalert()
{
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            mContext);

    // set title


    // set dialog message
    alertDialogBuilder
    .setMessage(etDesc.getText().toString())
    .setCancelable(false)


    .setNegativeButton("Done",new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            // if this button is clicked, just close
            // the dialog box and do nothing

            dialog.cancel();                                                            

        }
    });                 

    // show it
    alertDialogBuilder.show();

}

其原因是触摸事件被调用两次:

1.
MotionEvent.ACTION\u DOWN

当用户用手指触摸edittext时

2.
MotionEvent.ACTION\u UP

当用户从edittext中伸出手指时

要避免这种情况,请执行以下操作:

@Override
public boolean onTouch(View view, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
       setalert();
    }
}

其原因是触摸事件被调用两次:

1.
MotionEvent.ACTION\u DOWN

当用户用手指触摸edittext时

2.
MotionEvent.ACTION\u UP

当用户从edittext中伸出手指时

要避免这种情况,请执行以下操作:

@Override
public boolean onTouch(View view, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
       setalert();
    }
}

这在您的OnCreate下

ettext.setOnClickListener(new View.OnClickListener() 
            {
                    @Override
                    public void onClick(View v) 
                    {
                        setalert2();
                    }

                });
这在您的计划下进行

 public void setalert2()
        {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    mContext);

                // set title


                // set dialog message
                alertDialogBuilder
                    .setMessage(ettext.getText().toString())
                    .setCancelable(true);







                    // show it
                alertDialogBuilder.show();

                }

这在您的OnCreate下

ettext.setOnClickListener(new View.OnClickListener() 
            {
                    @Override
                    public void onClick(View v) 
                    {
                        setalert2();
                    }

                });
这在您的计划下进行

 public void setalert2()
        {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    mContext);

                // set title


                // set dialog message
                alertDialogBuilder
                    .setMessage(ettext.getText().toString())
                    .setCancelable(true);







                    // show it
                alertDialogBuilder.show();

                }

检查此更改您的onTouch那样..更改Listencer-使用onClickLictenerok。。将在单击时尝试此功能在单击时使用侦听器可以正常工作。谢谢当您尝试触摸按钮或任何控件到TouchListner调用2-3次时,您的对话框将打开2次。尝试在ontouchlistner中输入日志值,您会得到想法。检查此更改您的onTouch,就像那样..更改Listencer-使用onClickLictenerok。。将在单击时尝试此功能在单击时使用侦听器可以正常工作。谢谢当你试着触摸按钮或任何一个控件在TouchListner上打2-3次电话时,你的对话框就会打开2次。试着在ontouchlistner上输入日志值,你就会明白了。