【问题标题】:Android dialog dismisses on second click only. Why?Android 对话框仅在第二次单击时关闭。为什么?
【发布时间】:2015-11-15 12:18:49
【问题描述】:

为什么对话框在第一次点击时不消失(但显示 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();
}

【问题讨论】:

  • 可能你连续显示两次?
  • 不,一旦...测试:if(!dialog.isShowing()){ dialog.show(); } else{ Toast.makeText(getApplicationContext(), "DIALOG ON !!!!!!!!!!!!", Toast.LENGTH_LONG).show(); }
  • 也许你可以试试 dialog.cancel();而不是dismiss()
  • 试试if(dialog.isShowing()) { // show Toast; return;}
  • 这也只发生在第一个 show() 上。然后,双击关闭后,一键关闭。

标签: android dialog dismiss


【解决方案1】:

试试这个方法。让我告诉你。希望对你有帮助。

     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 switch 语句

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

【讨论】:

  • 这个回复没有增加任何价值。不知道为什么它被赞成。
【解决方案2】:

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

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

或者在调试中添加日志/运行

【讨论】:

    【解决方案3】:

    让你的 Button 也像这样最终化:

    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();
    

    【讨论】:

    • 这很有趣,我有一个非常相似的代码,我将添加到帖子中并且它正在工作......你在哪里调用这个函数?
    • 它正在工作,但只有在您第一次双击将其关闭后。然后它可以正常工作 - 一键关闭。
    • 对我来说,它一键关闭,我只是尝试过:(.
    • 你能分享代码吗,你在哪里调用networkDialog()函数?
    • dismiss() 出了点问题,因为当我再添加一个按钮时 Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);开始活动(意图);它应该从第一次点击开始工作。所以,函数本身被调用并正常工作,但dismiss()执行。
    【解决方案4】:

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

    button.setFocusableInTouchMode(false)
    

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

    I have to click the button twice for it to work

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多