Intereting Posts
Можно ли измерить, насколько далеко телефон перемещается по вертикали Собственный самомодифицирующийся код на Android DisplayLeakActivity не существует Android: активность не найдена на некоторых устройствах при попытке открыть локальный HTML-файл в браузере Устройство ADB для Android запрещено Защитите сокет в VpnService CollapsingToolbarLayout с многострочным заголовком Android-карты: как определить центр карты после завершения перетаскивания Почему мое меню редактирования / вставки EditText находится под EditText? Как изменить всплывающее окно z-порядка? Как сделать возобновление сеанса SSL на Android Как создать значок значка значка в приложениях Android (например, iPhone) Android Как создать фильтр Intent для пользовательского расширения файла, которое НЕ делает его частью выбора для всего, что есть на телефоне Отсутствующие данные на расширенной странице аналитики электронной торговли Android Android Display HTML в ListView NFC Offhost маршрутизирует UICC на Nexus 5X и Nexus 6P

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

В настоящее время, когда пользователь открывает мое приложение, открывается 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(); } }); 

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