
Android alert dialog with three button options: No, Yes, and Neutral (Cancel)
The Android Dialog Application: What we’ll be making
As pictured above, we will be creating an Android application that has a button and a text box in the home activity. When the user clicks the button an alert dialog with three buttons: No, Cancel, and Yes will pop-up.
The text in the text box will change depending on the user’s selection. Furthermore the user is not able to close the dialog by simply clicking outside of it.
The User’ Interface
As mentioned above what we need is a button and a textview.
res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Button" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button1" android:layout_marginTop="26dp" android:text="Please click on the button to accept the terms of service." android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout>
Activity Code
Here is the code, scroll below it to see the explanation.
MainActivity.java
package com.example.alertdialogexample; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener,DialogInterface.OnClickListener{ private Button b; private TextView t; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b=(Button)findViewById(R.id.button1); b.setOnClickListener(this); t=(TextView)findViewById(R.id.textView1); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onClick(View v) { // TODO Auto-generated method stub AlertDialog ad = new AlertDialog.Builder(this) .setMessage("Blah blah blah.\n Fine pring.\n Do you accept all our terms and conditions?") .setIcon(R.drawable.ic_launcher) .setTitle("Terms of Service") .setPositiveButton("Yes", this) .setNegativeButton("No", this) .setNeutralButton("Cancel", this) .setCancelable(false) .create(); ad.show(); } @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub switch(which){ case DialogInterface.BUTTON_POSITIVE: // yes t.setText("You have accepted the TOS. Welcom to the site"); break; case DialogInterface.BUTTON_NEGATIVE: // no t.setText("You have denied the TOS. You may not access the site"); break; case DialogInterface.BUTTON_NEUTRAL: // neutral t.setText("Please select yes or no"); break; default: // nothing break; } } }
Java Code Explanation
The first thing we need to do is implement OnClickListeners for both the button and dialog, they each have their own method definition.
public class MainActivity extends Activity implements View.OnClickListener,DialogInterface.OnClickListener{
Next we need to assign the views of the button and textview
private Button b; private TextView t; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b=(Button)findViewById(R.id.button1); b.setOnClickListener(this); t=(TextView)findViewById(R.id.textView1); }
We will now fill in the onclick method for the button. It is here were we will build and call our alert dialog from. Using the AlertDialog.Builder method we will set the various parameters for the dialog, some are pretty explanatory, as you’ll see, so I would like to focus on the ones you might not understand at first sight.
@Override public void onClick(View v) { // TODO Auto-generated method stub AlertDialog ad = new AlertDialog.Builder(this) .setMessage("Blah blah blah.\n Fine pring.\n Do you accept all our terms and conditions?") .setIcon(R.drawable.ic_launcher) .setTitle("Terms of Service") .setPositiveButton("Yes", this) .setNegativeButton("No", this) .setNeutralButton("Cancel", this) .setCancelable(false) .create(); ad.show(); }
The methods setPositiveButton, setNegativeButton, and setNeutralButton create our three buttons in the dialog alert. The first parameter of each of this methods is the text for the button, the second parameter is the listener for the button, since we implemented the DialogInterface.OnClickListener class in the MainActivity class or listener object is MainActivity’s object or "this".
The seCancelable method prevents the user from closing the alert dialog by clicking outside of the dialog, the default is "true", I have set it to false however so that the user is not able to perform this operation.
Now let’s take care of the OnClick method for the Dialog. Inside this onclick method we will handle the user’s selection. The OnClick method for the dialog gives us access to two parameters, the dialog object and an integer representing the button that was clicked called "which"
Using the which argument and a switch control flow we will change the text box’s change accordingly. The Android SDK has made available to use a set of constants which can be used to identify the button that was clicked. For example DialogInterface.BUTTON_POSITIVE goes with our "Yes" button that was created using the setPositiveButton method.
@Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub switch(which){ case DialogInterface.BUTTON_POSITIVE: // yes t.setText("You have accepted the TOS. Welcom to the site"); break; case DialogInterface.BUTTON_NEGATIVE: // no t.setText("You have denied the TOS. You may not access the site"); break; case DialogInterface.BUTTON_NEUTRAL: // neutral t.setText("Please select yes or no"); break; default: // nothing break; } }
And that’s how you make an alert dialog in android.
Related posts: