Я пытаюсь реализовать конструктор диалоговых окон предупреждений о материалах с элементами с несколькими вариантами выбора. Я пытаюсь отобразить список фильмов в виде флажков. Я столкнулся с трудностями при реализации опции «Выбрать все». Если я нажму кнопку Выбрать все , все параметры должны быть выбраны, но я не могу реализовать эту функцию. Подскажите, пожалуйста, как решить эту проблему?
My Activity
package com.tcs.usingcheckbox;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputEditText;
public class MainActivity extends AppCompatActivity {
private TextInputEditText typeOfMovies;
private CharSequence[] movies;
private boolean[] mSelectedItems, mNew;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
typeOfMovies = findViewById(R.id.typeOfMovies);
movies = new CharSequence[]{
"Horror",
"Thriller",
"Comedy",
"Select All"
};
mSelectedItems = new boolean[]{
false,
false,
false,
false
};
mNew = new boolean[]{
false,
false,
false,
false
};
typeOfMovies.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(MainActivity.this);
builder.setTitle("View Options");
builder.setBackground(getResources().getDrawable(R.drawable.alert_dialog_bg));
builder.setMultiChoiceItems(movies, mSelectedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
mSelectedItems[which] = isChecked;
}
});
builder.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < mNew.length; i++) {
mSelectedItems[i] = mNew[i];
}
dialog.dismiss();
}
});
builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
typeOfMovies.setText("");
for (int i = 0; i < mSelectedItems.length; i++) {
mNew[i] = mSelectedItems[i];
}
for (int i = 0; i < mSelectedItems.length; i++) {
boolean checked = mSelectedItems[i];
if (checked) {
if (movies[i].equals("Select All")) {
typeOfMovies.setText("All Selected");
} else {
typeOfMovies.setText(typeOfMovies.getText().toString() + movies[i] + "\n");
}
}
}
}
});
builder.setCancelable(false);
builder.show();
}
});
}
}
My XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/typeOfMovies"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cursorVisible="false"
android:focusable="false"
android:hint="Type of Movies"
android:textSize="14sp" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
My Alert Dialog Shape
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@android:color/white" />
<corners android:radius="16dp" />
</shape>
</item>
</selector>