How to implement a confirmation (yes/no) DialogPreference?

AndroidAndroid PreferencesConfirmationDialog Preference

Android Problem Overview


How can I implement a Preference that displays a simple yes/no confirmation dialog?

For an example, see Browser->Setting->Clear Cache.

Android Solutions


Solution 1 - Android

That is a simple alert dialog, Federico gave you a site where you can look things up.

Here is a short example of how an alert dialog can be built.

new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to whatever?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
	        
    public void onClick(DialogInterface dialog, int whichButton) {
	    Toast.makeText(MainActivity.this, "Yaay", Toast.LENGTH_SHORT).show();
	}})
 .setNegativeButton(android.R.string.no, null).show();

Solution 2 - Android

Android comes with a built-in YesNoPreference class that does exactly what you want (a confirm dialog with yes and no options). See the official source code here.

Unfortunately, it is in the com.android.internal.preference package, which means it is a part of Android's private APIs and you cannot access it from your application (private API classes are subject to change without notice, hence the reason why Google does not let you access them).

Solution: just re-create the class in your application's package by copy/pasting the official source code from the link I provided. I've tried this, and it works fine (there's no reason why it shouldn't).

You can then add it to your preferences.xml like any other Preference. Example:

<com.example.myapp.YesNoPreference
    android:dialogMessage="Are you sure you want to revert all settings to their default values?"
    android:key="com.example.myapp.pref_reset_settings_key"
    android:summary="Revert all settings to their default values."
    android:title="Reset Settings" />

Which looks like this:

screenshot

Solution 3 - Android

Use Intent Preference if you are using preference xml screen or you if you are using you custom screen then the code would be like below

intentClearCookies = getPreferenceManager().createPreferenceScreen(this);
	Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class);

	intentClearCookies.setIntent(clearcookies);
	intentClearCookies.setTitle(R.string.ClearCookies);
	intentClearCookies.setEnabled(true);
	launchPrefCat.addPreference(intentClearCookies);

And then Create Activity Class somewhat like below, As different people as different approach you can use any approach you like this is just an example.

public class ClearCookies extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	requestWindowFeature(Window.FEATURE_NO_TITLE);
	
	showDialog();
}

/**
 * @throws NotFoundException
 */
private void showDialog() throws NotFoundException {
	new AlertDialog.Builder(this)
			.setTitle(getResources().getString(R.string.ClearCookies))
			.setMessage(
					getResources().getString(R.string.ClearCookieQuestion))
			.setIcon(
					getResources().getDrawable(
							android.R.drawable.ic_dialog_alert))
			.setPositiveButton(
					getResources().getString(R.string.PostiveYesButton),
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog,
								int which) {
							//Do Something Here

						}
					})
			.setNegativeButton(
					getResources().getString(R.string.NegativeNoButton),
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog,
								int which) {
							//Do Something Here
						}
					}).show();
}}

As told before there are number of ways doing this. this is one of the way you can do your task, please accept the answer if you feel that you have got it what you wanted.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionsh1ngView Question on Stackoverflow
Solution 1 - AndroidMaaalteView Answer on Stackoverflow
Solution 2 - AndroidXåpplI'-I0llwlg'I -View Answer on Stackoverflow
Solution 3 - AndroidPravinDodiaView Answer on Stackoverflow