简体   繁体   中英

Alertdialog with checkbox ( Don't show again )

I need to show an AlertDialog with "Don't Show Again" checkbox. I searched, but I couldn't find a working solution:/

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
PackageManager pk = getPackageManager();
Drawable icon;

alertDialogBuilder
    .setTitle(R.string.confirm)
    .setPositiveButton(R.string.close, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            //Do something
        }
    });

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

If i'm not wrong then just Make one class extends with View .

public class DialogShow extends View {
SharedPreferences dialogPreferences;
String prefrencestring;
CheckBox nevershowagain;
Button closedialog;
Dialog dialog;
View view;

public DialogShow(final Context context) {
    super(context);
    dialog = new Dialog(context);
    view = View.inflate(context, R.layout.startdialog, null);
    dialog.setContentView(view);
    nevershowagain = (CheckBox) view.findViewById(R.id.nevershowagain);
    closedialog = (Button) view.findViewById(R.id.closedialog);

    closedialog.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (nevershowagain.isChecked()) {
                prefrencestring = "1";

                dialogPreferences = PreferenceManager
                        .getDefaultSharedPreferences(context);
                Editor editprefrences = dialogPreferences.edit();
                editprefrences.putString("showdialog", prefrencestring);
                editprefrences.commit();
            }

            dialog.dismiss();
        }
    });

    dialogPreferences = PreferenceManager
            .getDefaultSharedPreferences(context);
    String check = dialogPreferences.getString("showdialog", "");
    if (check.equals("1")) {
    } else {
        dialog.show();
    }
}

}

Now call this class in your splash Activity on onCreate() method..

     DialogShow  d = new Dialog(this);

You can try this for AlertDialog :

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();

builder.setView(inflater.inflate(R.layout.myDialogLayout, null));

Dialog d = builder.create();

Edit: Please look into HERE FOR DETAILS EXPLANATION

将您的视图传递给setView()方法,它将把您的视图设置为对话框主体。

alertDialogBuilder.setView(your_view);

Since the accepted answer is not a good one in 2023 (IMO) and this post is the first one on google search, here is my solution:

    private void showAlertWithCheck() {
    boolean infoShowed = PreferenceManager.getDefaultSharedPreferences(this).
            getBoolean(Const.PREF_KEY_INFO_SHOWN, false);

    if (!infoShowed) {
        View view = getLayoutInflater().inflate(R.layout.dialog_remember_check, null);

        final CheckBox chk_drc_Remember = view.findViewById(R.id.chk_drc_Remember);
        chk_drc_Remember.setText(R.string.dont_show_again);
        chk_drc_Remember.setChecked(true);

        new AlertDialog.Builder(MainActivity.this).
                setIcon(android.R.drawable.ic_dialog_info).
                setMessage(R.string.fixed_info).
                setView(view).
                setNeutralButton(R.string.caption_ok, null).
                setOnDismissListener(dialog ->
                        PreferenceManager.getDefaultSharedPreferences(this).edit().
                                putBoolean(Const.PREF_KEY_INFO_SHOWN,
                                        chk_drc_Remember.isChecked()).apply()).
                show();
    }
}

requied view XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical"
android:padding="@dimen/dialog_padding"
tools:context=".dialogs.PrayTimeDetailDialog"
tools:ignore="RtlHardcoded">

<CheckBox
    android:id="@+id/chk_drc_Remember"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true"
    android:paddingLeft="@dimen/dialog_padding"
    android:paddingRight="@dimen/dialog_padding"
    android:text="@string/remember_method" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM