Search code examples
androidandroid-alertdialog

onclick not working in custom AlertDialog in android


Hi in the below code onclick for save if it is empty should show some error or else should move to the next step.but it is not working .Inside frgament I am calling openDiag() method.

can any one help me

public class HomeNurseFragment extends Fragment {

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_coordinatorhome, container, false);

        openDialog(rootView);

    public void openDialog(View view) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
           // alertDialogBuilder.setTitle("Select Hospital and Proceed");
            final View customLayout
                    = getLayoutInflater()
                    .inflate(
                            R.layout.popup_hospitallist,
                            null);
    
            alertDialogBuilder.setView(customLayout);
            Button save = customLayout.findViewById(R.id.proceed);
            TextView cancel = customLayout.findViewById(R.id.cancel);
    save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(hospital.getItemAtPosition(0).equals("Preferred hospital")){
                        hospital.setError("Please select Preferred hospital ");
                    }else {
                    alertDialogBuilder.setCancelable(true);
                    }
                }
            });
     cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialogBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        @Override
                        public void onDismiss(DialogInterface dialog) {
                            dialog.dismiss();
                        }
                    });
                }
            });
          //  AlertDialog alertDialog = alertDialogBuilder.create();
    
            alertDialogBuilder.show();
        }
}
}

Solution

  • If you want to display an error message instead of dismissing the AlertDialog, you have to disable the clickListener and set your custom one instead.

    public void openDialog(View view) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
        // alertDialogBuilder.setTitle("Select Hospital and Proceed");
        final View customLayout = getLayoutInflater().inflate(R.layout.popup_hospitallist, null);
    
         alertDialogBuilder.setView(customLayout);
         alertDialogBuilder.setPositiveButton("Save", null); // set listener to null as you will override it later
         alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
        });
    
        final AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    
        // Overriding the Positive button here
        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
        {            
          @Override
          public void onClick(View v)
          {
              if(hospital.getItemAtPosition(0).equals("Preferred hospital")){
                  hospital.setError("Please select Preferred hospital ");
              } else {
                  alertDialogBuilder.setCancelable(true);
              }
          }
      });