2015-08-21 29 views
4

为什么在第一次点击时不弹出对话框(但显示吐司)? 第二次单击它会解散(Toast再次显示)。Android对话框仅在第二次点击时关闭。为什么?

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(); 
} 
+3

也许你正在展示它连续两次? – Blackbelt

+0

nope,once ... tested:if(!dialog.isShowing()){0} dialog.show();} \t else { \t Toast.makeText(getApplicationContext(),“DIALOG ON !!!!!!!!!!!”,Toast.LENGTH_LONG).show(); } – JohnK

+0

也许你可以试试dialog.cancel();而不是解雇() – Opiatefuchs

回答

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

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

此回复没有添加任何值。不知道为什么这是upvoted。 – JohnK

+0

此代码在这里工作正常 –

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

仍然相同... – JohnK

+0

这很有趣,我有一个非常类似的代码,我将添加到该帖子,它的工作......你在哪里调用这个函数? – bendaf

+0

它正在工作,但只有在您第一次双击它才解散它。然后,它按原样运行 - 单击即可解除。 – JohnK

0

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

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

或者添加日志/调试

0

我不知道这是否仍然适用于OP运行。但是我已经把头撞到了墙上很长一段时间,试图找出这个问题。它似乎发生在后来的(5-6 +)Android版本中,并没有出现在我拥有的4.4.2设备上。我已经找到了解决办法是按钮的setFocusableInTouchMode为false:

button.setFocusableInTouchMode(false) 

这个答案给了我的想法:

I have to click the button twice for it to work

相关问题