web-dev-qa-db-ja.com

警告ダイアログにチェックボックスを追加する方法

現在、ユーザーがアプリを開くと、AlertDialogが開き、プロバージョンにアップグレードするかどうかを尋ねられます。

CheckBoxAlertDialogに追加して、ユーザーがアプリを開いたときにアプリが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();

CheckBoxAlertDialogに追加すると、ユーザーがアプリを開いたときにAlertDialogが表示されなくなります。

38
user749911

_AlertDialog.Builder_オブジェクトでsetView(View)メソッドを使用する必要があります。これにより、渡されたViewがメッセージ領域とボタンの間に配置されます。単にViewCheckBoxで膨らませて渡します。以下に例を示します。

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();
_
84
Jason Robinson

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

                   }
               });
_

この設定により、今後ダイアログを再度表示するかどうかを決定できます。

3
Jannik B

Enter image description here

チェックボックスリストを作成する方法は、setMultiChoiceItemsAlertDialogを使用することです。

// 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()
1
Suragch

最初に、後続のビューでアラートを無効にするためのメッセージとチェックボックスを含むレイアウトを定義する必要があります。次に、builder.setMessageを呼び出す代わりに、次を呼び出します。

builder.setView(myAlertViewWithDisablingCheckbox);

次に、ユーザーがアラートダイアログボタンをクリックすると、そのチェックボックスがオンになっているかどうかを確認し、その設定をアプリのSharedPreferencesに保存する必要があります。次に、その設定を使用して、このアラートダイアログを再びユーザーに表示するかどうかを決定できます。

1
Mike Bockus