2017-07-22 129 views
-1

我一直在研究這一個小時,我無法弄清楚爲什麼即使單擊其中一個按鈕後,我也無法解除對話框。如果我把b.dismiss()放在按鈕之後,對話框甚至不顯示。如何關閉此警報對話框?

private AlertDialog b; 

    // custom dialog 
    AlertDialog.Builder dialogBuilder = new 
    AlertDialog.Builder(MapsActivity.this); 
    LayoutInflater inflater = MapsActivity.this.getLayoutInflater(); 
    final View dialogView = inflater.inflate(R.layout.custom_dialog, null); 
    dialogBuilder.setView(dialogView); 

    Button reject = (Button) dialogView.findViewById(R.id.reject_btn); 
    Button accept = (Button) dialogView.findViewById(R.id.accept_btn); 

    b = dialogBuilder.create(); 
    b.show(); 


    accept.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      b.dismiss(); 



     } 
    }); 

    reject.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      b.dismiss(); 


     } 
    }); 

我曾嘗試在

dialogBuilder.setPositiveButton("Done", new 
    DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     //do something with edt.getText().toString(); 
    } 
}); 
dialogBuilder.setNegativeButton("Cancel", new 
    DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     //pass 
    } 
}); 

貶這並不工作

如果可以拿起東西,我錯過了你的幫助將是非常感謝!

我已經注意到,如果我將它解僱了大約60次,那麼這意味着,我的代碼創建了一個對話60次,這可能是什麼原因?

編輯

+0

所有你需要做的我們'dialog.dismiss()'的按鈕,點擊聽衆 –

+0

怎麼樣'dialog.cancel()' ? – TWL

回答

0

我不知道你寫你的代碼來啓動對話框。我已經複製了你的代碼。這和預期一樣。

public class MainActivity extends AppCompatActivity { 

    private AlertDialog b; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // custom dialog 
     AlertDialog.Builder dialogBuilder = new 
       AlertDialog.Builder(this); 
     LayoutInflater inflater = getLayoutInflater(); 
     final View dialogView = inflater.inflate(R.layout.custom_dialog, null); 
     dialogBuilder.setView(dialogView); 

     Button reject = (Button) dialogView.findViewById(R.id.reject_btn); 
     Button accept = (Button) dialogView.findViewById(R.id.accept_btn); 

     b = dialogBuilder.create(); 
     b.show(); 


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

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

下面是XML。再一個非常基本的一個,以滿足你的代碼

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:layout_width="wrap_content" 
     android:id="@+id/reject_btn" 
     android:text="Reject" 
     android:layout_height="wrap_content" /> 
    <Button 
     android:layout_width="wrap_content" 
     android:id="@+id/accept_btn" 
     android:text="Accept" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 
+0

謝謝,這有助於很多 – krumpking

+0

無後顧之憂。如果它有助於解決您的問題,請接受它作爲答案。至少會讚揚upvote –

1

試試這個

 dialogBuilder.setPositiveButton("Done", new 
    DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     //do something with edt.getText().toString(); 
     dialogBuilder.dismiss(); 
     // or 
     dialogBuilder.cancel(); 
    } 
}); 
dialogBuilder.setNegativeButton("Cancel", new 
    DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
    dialogBuilder.dismiss(); 
     // or 
    dialogBuilder.cancel(); 
    } 
}); 
+0

dialogBu​​ilder類沒有方法解除和取消謝謝你,雖然 – krumpking

1

試試這個關閉該對話框

dialogBuilder.setPositiveButton("Done", new 
    DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      //do something with edt.getText().toString(); 
      dialog.dismiss(); 
     } 
}); 

dialogBuilder.setNegativeButton("Cancel", new 
    DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.dismiss(); 
     } 
}); 
+0

沒有工作,這對我來說真的很奇怪,因爲你可以看到它幾乎取消,但然後它再次彈出 – krumpking

0

試試這個

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("message"); 
     builder.setPositiveButton("Yes", new 
DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     dialog.dismiss(); 

     }); 

     builder.setNegativeButton("NO",new 
DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     dialog.dismiss(); 
     }); 
     builder.show(); 
+0

我運行之前得到一個錯誤,lambda表達式不允許在這個語言級別 – krumpking

+0

它在java 8中完成,所以你得到這個錯誤。現在我使用簡單的代碼,請檢查我更新的答案。 –

+0

仍然不起作用 – krumpking