現在、ユーザーがアプリを開くと、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
が表示されなくなります。
_AlertDialog.Builder
_オブジェクトでsetView(View)
メソッドを使用する必要があります。これにより、渡された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();
_
1つのアイテムのみでマルチチョイスリストを使用できます。
_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();
}
});
_
この設定により、今後ダイアログを再度表示するかどうかを決定できます。
チェックボックスリストを作成する方法は、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()
最初に、後続のビューでアラートを無効にするためのメッセージとチェックボックスを含むレイアウトを定義する必要があります。次に、builder.setMessage
を呼び出す代わりに、次を呼び出します。
builder.setView(myAlertViewWithDisablingCheckbox);
次に、ユーザーがアラートダイアログボタンをクリックすると、そのチェックボックスがオンになっているかどうかを確認し、その設定をアプリのSharedPreferences
に保存する必要があります。次に、その設定を使用して、このアラートダイアログを再びユーザーに表示するかどうかを決定できます。