【问题标题】:how to keep alert dialog appear when displaying toast in validation radio button inside that alert dialog在该警报对话框内的验证单选按钮中显示 toast 时如何保持警报对话框出现
【发布时间】:2018-11-08 22:13:07
【问题描述】:

我在警报对话框中有一个单选按钮,然后我验证单选按钮,如果没有选定的单选按钮,它将显示 Toast 消息并且必须保持出现警报对话框。但是我的代码在显示 toast 时将关闭警报对话框。

private void showPopupSubscribe() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    final View dialogView = getLayoutInflater().inflate(R.layout.paket_subscribe, null);
    builder.setView(dialogView);
    builder.setCancelable(false);
    builder.setIcon(R.drawable.logo_1);
    builder.setTitle(R.string.subscription_package);
    final RadioGroup radioGroup = dialogView.findViewById(R.id.rgSubscribe);

    builder.setPositiveButton("Next", new DialogInterface.OnClickListener() {
        @SuppressLint("ResourceType")
        @Override
        public void onClick(DialogInterface dialog, int which) {
            int selected = radioGroup.getCheckedRadioButtonId();

            if (selected == R.id.rbA) {
                smsCode = vv0;
            } else if (selected == R.id.rbB) {
                smsCode = vv1;
            } else if (selected == R.id.rbC) {
                smsCode = vv2;
            } else if (selected == R.id.rbD) {
                smsCode = vv3;
            }
            if (selected == -1 ){
                Toast.makeText(CatalogHomeActivity.this, "Pilih paket untuk berlangganan", Toast.LENGTH_SHORT).show();

            }else {
                pdSubs.show();
                doCharging();
                dialog.dismiss();
            }
        }
    });
    dialog = builder.create();
    dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
                finish();
            }
            return true;
        }
    });
    dialog.show();
}

【问题讨论】:

    标签: android validation radio-button android-alertdialog


    【解决方案1】:

    首先删除 setPositiveButton(); 然后设置正按钮 如果您想在 setOnShowListener 中关闭对话框,则在该对话框之后

     ...
                builder.setPositiveButton(android.R.string.ok, null);
                ...
                dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                    @Override
                    public void onShow(DialogInterface dialog) {
                        Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
                        button.setOnClickListener(new View.OnClickListener() {
    
                            @Override
                            public void onClick(View view) {
                                if (selected == -1 ){
                                    Toast.makeText(CatalogHomeActivity.this, "Pilih paket untuk berlangganan", Toast.LENGTH_SHORT).show();
    
                                }else {
                                    pdSubs.show();
                                    doCharging();
                                    dialog.dismiss();
                                }
                            }
                        });
                    }
                });
                dialog.show();
    

    【讨论】:

      【解决方案2】:

      试试下面的代码。

      private void showPopupSubscribe() {
              final AlertDialog.Builder builder = new AlertDialog.Builder(this);
              final View dialogView = getLayoutInflater().inflate(R.layout.paket_subscribe, null);
              builder.setView(dialogView);
              builder.setCancelable(false);
              builder.setIcon(R.drawable.logo_1);
              builder.setTitle(R.string.subscription_package);
              builder.setPositiveButton("Next", null);
              final RadioGroup radioGroup = dialogView.findViewById(R.id.rgSubscribe);
      
      
              dialog = builder.create();
              dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
                  @Override
                  public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                      if (keyCode == KeyEvent.KEYCODE_BACK) {
                          dialog.dismiss();
                          finish();
                      }
                      return true;
                  }
              });
              dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                  @Override
                  public void onShow(DialogInterface dialog) {
                      Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
                      button.setOnClickListener(new View.OnClickListener() {
      
                          @Override
                          public void onClick(View view) {
                              int selected = radioGroup.getCheckedRadioButtonId();
      
                              if (selected == R.id.rbA) {
                                  smsCode = vv0;
                              } else if (selected == R.id.rbB) {
                                  smsCode = vv1;
                              } else if (selected == R.id.rbC) {
                                  smsCode = vv2;
                              } else if (selected == R.id.rbD) {
                                  smsCode = vv3;
                              }
                              if (selected == -1 ){
                                  Toast.makeText(CatalogHomeActivity.this, "Pilih paket untuk berlangganan", Toast.LENGTH_SHORT).show();
      
                              }else {
                                  pdSubs.show();
                                  doCharging();
                                  dialog.dismiss();
                              }
                          }
                      });
                  }
              });
              dialog.show();
          }
      

      【讨论】:

      • 感谢您的解决方案,我已经尝试过您的代码,但没有出现正面按钮..
      猜你喜欢
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2023-03-13
      相关资源
      最近更新 更多