Подтвердить что ты не робот

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

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

Мне нужно добавить 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 когда пользователь открывает приложение?

4b9b3361

Ответ 1

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

checkbox.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <CheckBox
        android:id="@+id/checkbox"
        style="?android:attr/textAppearanceMedium"
        android:layout_width="match_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();

Ответ 2

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

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

                   }
               });

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

Ответ 3

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

builder.setView(myAlertViewWithDisablingCheckbox);

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

Ответ 4

Enter image description here

Способ создания списка setMultiChoiceItems заключается в использовании setMultiChoiceItems в AlertDialog.

// Set up the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");

// Add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // The user checked or unchecked a box
    }
});

// Add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // The user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// Create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

Здесь я жестко запрограммировал, какие пункты в списке уже были проверены. Скорее всего, вы захотите отслеживать их в ArrayList<Integer>. Смотрите пример документации для более подробной информации. Вы также можете установить отмеченные элементы на null если вы хотите, чтобы все начиналось без проверки.

Для context, вы можете использовать this если вы находитесь в деятельности.

Мой более полный ответ здесь.

Котлин версия

// Set up the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose some animals")

// Add a checkbox list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItems = booleanArrayOf(true, false, false, true, false)
builder.setMultiChoiceItems(animals, checkedItems) { dialog, which, isChecked ->
    // The user checked or unchecked a box
}

// Add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // The user clicked OK
}
builder.setNegativeButton("Cancel", null)

// Create and show the alert dialog
val dialog = builder.create()
dialog.show()