Как добавить флажок в диалоговое окно предупреждения

В настоящее время, когда пользователь открывает мое приложение, открывается AlertDialog спрашивая, хотят ли они обновиться до версии pro. Мне нужно добавить CheckBox в AlertDialog , который заставит приложение больше не показывать AlertDialog когда пользователь открывает приложение.

Вот что я имею для AlertDialog сейчас:

 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(); 

Если кто-то может показать мне, как добавить CheckBox в AlertDialog , который заставит приложение больше не показывать AlertDialog когда пользователь откроет приложение, это было бы здорово. Заранее спасибо!

Solutions Collecting From Web of "Как добавить флажок в диалоговое окно предупреждения"

Вы должны использовать метод setView(View) в объекте AlertDialog.Builder . Это поместит переданный в поле View между областью сообщений и кнопками. Просто надуйте View с помощью CheckBox и передайте это. Вот пример:

checkbox.xml

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

Код в вашей деятельности

 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(); 

Сначала вам нужно определить макет, содержащий сообщение и флажок для отключения предупреждения в последующих представлениях. Затем вместо вызова builder.setMessage вы вызываете:

 builder.setView(myAlertViewWithDisablingCheckbox); 

Затем, когда пользователь нажимает на кнопку предупреждения, вам нужно будет проверить, установлен ли этот флажок, и сохранить это предпочтение в SharedPreferences вашего приложения. Затем вы можете использовать это предпочтение, чтобы определить, должно ли это диалоговое окно предупреждения снова отображаться пользователю.

Вы можете использовать многоходовой список только с одним элементом:

 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; } }); 

Затем в диалоговом окне OnClick() диалогового окна предупреждения вы можете проверить значение checked[0] и сохранить это значение в 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(); } }); 

С помощью этого предпочтения вы можете решить, следует ли снова показывать диалог в будущем.