Android对话框仅在第二次单击时解除。为什么?

时间:2015-08-21 13:59:51

标签: android dialog dismiss

为什么第一次点击时不会关闭对话框(但会显示Toast)? 在第二次点击时,它会解散(再次显示Toast)。

private void networkDialog(){
    final Dialog dialog = new Dialog(EnterActivity.this, android.R.style.Theme_Translucent_NoTitleBar);
    dialog.setContentView(R.layout.custom_dialog);
    Button nobutton = (Button) dialog.findViewById(R.id.dialogButLeft);
    nobutton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
            Toast.makeText(getApplicationContext(), "DIALOG", Toast.LENGTH_LONG).show();
        }
   });
   dialog.show();
}

4 个答案:

答案 0 :(得分:2)

试试这种方式。让我告知。我希望它会对你有帮助。

     private void networkDialog()
      {

        final Dialog dialog = new Dialog(EnterActivity.this, android.R.style.Theme_Translucent_NoTitleBar);
        dialog.setContentView(R.layout.custom_dialog);
        Button nobutton = (Button) dialog.findViewById(R.id.dialogButLeft);
        nobutton.setOnClickListener(this);
        dialog.show();

        }

然后使用 onClick开关语句

public void onClick(View view)
    {
        switch (view.getId())
        {
            case R.id.dialogButLeft:
                Toast.makeText(getApplicationContext(), "DIALOG", Toast.LENGTH_LONG).show();
                dialog.dismiss();
                break;
         }
    }

答案 1 :(得分:1)

有点晚了,但是一位同事有同样的问题并且提到了这个问题,你是否完全确定你没有通过两次调用networkDialog()来创建两个对话框?

在对话框中添加一些独特的文本,当它显示为System.currentTimeMillis()时,您将可以看到它,这样您就可以看到它是否因为文本不同而被调用了两次。 / p>

或者在debug

中添加日志记录/运行

答案 2 :(得分:0)

让你的按钮也像这样最终:

private void networkDialog(){
    final Dialog dialog = new Dialog(EnterActivity.this, android.R.style.Theme_Translucent_NoTitleBar);
    dialog.setContentView(R.layout.custom_dialog);
    final Button nobutton = (Button) dialog.findViewById(R.id.dialogButLeft);
    nobutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
            Toast.makeText(getApplicationContext(), "DIALOG", Toast.LENGTH_LONG).show();
        }
   });
   dialog.show();
}

它在我的应用中为我工作如下:

// Initialize variables
final Dialog passwordDialog = new Dialog(BPMActivity.this,R.style.CustomDialogStyle);
passwordDialog.setContentView(R.layout.password_view);
final Button btnCancel=(Button) passwordDialog.findViewById(R.id.btn_cancel);


btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                passwordDialog.dismiss();
            }
        });

passwordDialog.show();

答案 3 :(得分:0)

我不知道这是否与OP有关。但是我已经把头撞到了墙上很长一段时间试图弄清楚这个。它似乎发生在后来的(5-6 +)Android版本中,并没有出现在我拥有的4.4.2设备上。我发现的解决方案是将Button的setFocusableInTouchMode设为false:

button.setFocusableInTouchMode(false)

这个答案给了我这个想法:

I have to click the button twice for it to work