2015-08-21 31 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

相關問題