How to add a check box to an alert dialog How to add a check box to an alert dialog android android

How to add a check box to an alert dialog


You have to use the method setView(View) on the AlertDialog.Builder object. This will put the passed in View between the message area and buttons. Simply inflate a View with a CheckBox and pass that in. Here's an example:

checkbox.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content" >    <CheckBox        android:id="@+id/checkbox"        style="?android:attr/textAppearanceMedium"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="5dp" /></FrameLayout>

Code in your Activity

View checkBoxView = View.inflate(this, R.layout.checkbox, null);CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox);checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {    @Override    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {        // Save to shared preferences    }});checkBox.setText("Text to the right of the check box.");AlertDialog.Builder builder = new AlertDialog.Builder(this);    builder.setTitle(" MY_TEXT");    builder.setMessage(" MY_TEXT ")           .setView(checkBoxView)           .setCancelable(false)           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {               public void onClick(DialogInterface dialog, int id) {                   Uri uri = Uri.parse("market://details?id=MY_APP_PACKAGE");                   Intent intent = new Intent (Intent.ACTION_VIEW, uri);                    startActivity(intent);                          }           })           .setNegativeButton("No", new DialogInterface.OnClickListener() {               public void onClick(DialogInterface dialog, int id) {                    dialog.cancel();               }           }).show();


Enter image description here

The way to make a checkbox list is to use setMultiChoiceItems in the AlertDialog.

// Set up the alert builderAlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle("Choose some animals");// Add a checkbox listString[] animals = {"horse", "cow", "camel", "sheep", "goat"};boolean[] checkedItems = {true, false, false, true, false};builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {    @Override    public void onClick(DialogInterface dialog, int which, boolean isChecked) {        // The user checked or unchecked a box    }});// Add OK and Cancel buttonsbuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        // The user clicked OK    }});builder.setNegativeButton("Cancel", null);// Create and show the alert dialogAlertDialog dialog = builder.create();dialog.show();

Here I hard coded which items in the list were already checked. It is more likely that you would want to keep track of them in an ArrayList<Integer>. See the documentation example for more details. You can also set the checked items to null if you always want everything to start unchecked.

For context, you can use this if you are in an Activity.

My fuller answer is here.

Kotlin version

// Set up the alert builderval builder = AlertDialog.Builder(context)builder.setTitle("Choose some animals")// Add a checkbox listval animals = arrayOf("horse", "cow", "camel", "sheep", "goat")val checkedItems = booleanArrayOf(true, false, false, true, false)builder.setMultiChoiceItems(animals, checkedItems) { dialog, which, isChecked ->    // The user checked or unchecked a box}// Add OK and Cancel buttonsbuilder.setPositiveButton("OK") { dialog, which ->    // The user clicked OK}builder.setNegativeButton("Cancel", null)// Create and show the alert dialogval dialog = builder.create()dialog.show()


You could use a multichoicelist with only one item:

final boolean[] checked = new boolean[] {false};builder.setMultiChoiceItems(new String[]{"Remember decision"}, checked, new DialogInterface.OnMultiChoiceClickListener() {               @Override               public void onClick(DialogInterface dialogInterface, int i, boolean b) {                   checked[i] = b;               }           });

Then in the OnClick() of an alert dialog button you can check the value of checked[0]and save that value in your app's Sharedpreferences:

builder.setNegativeButton("No", new DialogInterface.OnClickListener() {                   @Override                   public void onClick(DialogInterface dialogInterface, int i) {                       if(checked[0]){                           SharedPreferences.Editor editor = settings.edit();                           editor.putBoolean("preferences_never_buy_pro", true);                           editor.apply();                       }                       dialog.cancel();                   }               });

With this preference you can decide whether the dialog should be shown again in the future.