簡體   English   中英

取消打開 AlertDialog 關閉

[英]Cancel switch on AlertDialog dismiss

所以基本上,當用戶點擊開關按鈕時,會彈出一個 AlertDialog,詢問他是否確定要這樣做……如果他說是,那么開關按鈕將……很好地切換到它應該做的另一側,但如果他說不。 .my switch button should remain position. The problem is that when I click switch button AlertDialog popup and if I click yes it works fine...但是當我單擊no時...我的開關按鈕卻更改為position。我的代碼:

    if (binding.optionsSwitch.isChecked()) {
                SharedPreferences.Editor editor = context.getSharedPreferences("save", Context.MODE_PRIVATE).edit();
                editor.putBoolean("value", true);
                editor.apply();
                binding.optionsSwitch.setChecked(true);
         
                AlertDialog.Builder dialogBuider = new AlertDialog.Builder(context);
                dialogBuider.setMessage("Are you sure you want to delete the selected item?");
                dialogBuider.setPositiveButton("Delete item", (dialog, which) -> {
                    viewModel.mtDeleteCumulativeResponse().observe(getViewLifecycleOwner(), objectObserver);
                    viewModel.deleteCumulative();
                    viewModel.getAssets();
                    dialog.dismiss();
                });

               dialogBuider.setNegativeButton("Quit", (dialog, id) -> {
                    dialog.cancel();
               // binding.optionsSwitch.setChecked(true);
            });
            dialogBuider.setOnCancelListener(dialog -> {

                binding.optionsSwitch.setChecked(false);
            });
                // Create and show the AlertDialog
                AlertDialog alertDialog = dialogBuider.create();
                alertDialog.show();
                

            } else {

                SharedPreferences.Editor editor = context.getSharedPreferences("save", Context.MODE_PRIVATE).edit();
                editor.putBoolean("value", false);
                editor.apply();
                binding.optionsSwitch.setChecked(false);
                AlertDialog.Builder dialogBuider = new AlertDialog.Builder(context);
                dialogBuider.setMessage("Are you sure you want to delete the selected item?");
                dialogBuider.setPositiveButton("Delete item", (dialog, which) -> {
                    dialog.dismiss();
 
});
                dialogBuider.setNegativeButton("Quit", (dialog, id) -> {
                dialog.cancel();
            });

            dialogBuider.setOnCancelListener(dialog -> {
            binding.optionsSwitch.setChecked(true); });
                // Create and show the AlertDialog
                AlertDialog alertDialog = dialogBuider.create();
                alertDialog.show();

和我的 xml:`

<Switch
                android:id="@+id/options_switch"
                android:layout_width="0dp"
                android:layout_height="19dp"
                android:layout_marginStart="8dp"
                android:background="@color/bela"
                android:padding="6dp"
                android:paddingStart="26dp"
                android:text="Detailed Item List"
                android:textColor="#8fa2b0"
                android:textSize="9sp"
                android:checked="true"
                app:layout_constraintBottom_toTopOf="@+id/rv_cash_acc_list"
                app:layout_constraintEnd_toStartOf="@+id/list_details_swtch"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/rv_cash_acc_list"
                app:layout_constraintWidth_percent="0.55"
                tools:ignore="UseSwitchCompatOrMaterialXml" />`

實現此目的的最佳方法是添加 OnDismissListener 或 OnCancelListener。 alertDialog.setOnCancelListener(dialog -> { binding.optionsSwitch.setChecked(false); });

if (binding.optionsSwitch.isChecked()) {
    /*...*/
    dialogBuider.setNegativeButton("Quit", (dialog, id) -> {
        if (dialog != null) {
            dialog.dismiss();
            binding.optionsSwitch.setChecked(false);
            //False here, you want to undo the check action in your switch.
        }
    });
    /*...*/
}
else {
    /*...*/
    dialogBuider.setNegativeButton("Quit", (dialog, id) -> {
        if (dialog != null) {
            dialog.dismiss();
            binding.optionsSwitch.setChecked(true);
            //Here should be true, now is not checked but you want to undo it and check it.
         }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM