Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a check box to an alert dialog

Currently when the user opens my app, an AlertDialog opens, asking them if they would like to upgrade to the pro version.

I need to add a CheckBox to the AlertDialog that will make the app no longer show the AlertDialog when the user opens the app.

Here is what I have for the AlertDialog now:

AlertDialog.Builder builder = new AlertDialog.Builder(this);     builder.setTitle(" MY_TEXT");     builder.setMessage(" MY_TEXT ")            .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(); 

How do I add a CheckBox to the AlertDialog that will make the app no longer show the AlertDialog when the user opens the app?

like image 646
Lucas Faudman Avatar asked Mar 19 '12 00:03

Lucas Faudman


People also ask

What is alert dialog builder?

AlertDialog.Builder. setSingleChoiceItems(CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener) Set a list of items to be displayed in the dialog as the content, you will be notified of the selected item via the supplied listener. AlertDialog.Builder. setTitle(CharSequence title)


2 Answers

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(); 
like image 155
Jason Robinson Avatar answered Sep 24 '22 15:09

Jason Robinson


Enter image description here

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

// Set up the alert builder AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Choose some animals");  // Add a checkbox list String[] 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 buttons builder.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 dialog AlertDialog 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 builder val builder = AlertDialog.Builder(context) builder.setTitle("Choose some animals")  // Add a checkbox list val 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 buttons builder.setPositiveButton("OK") { dialog, which ->     // The user clicked OK } builder.setNegativeButton("Cancel", null)  // Create and show the alert dialog val dialog = builder.create() dialog.show() 
like image 41
Suragch Avatar answered Sep 23 '22 15:09

Suragch