Search code examples
androidmenudialog

Alert Dialog from within onOptionsItemSelected android


I'm trying to bring up an alert dialog box when one of my OptionsMenuItems is clicked. Proceed with operation if user clicks "yes", cancels if clicks no. I just don't know how to do the code. This is what I have:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{ 

    switch (item.getItemId()) { 
    case R.id.exit:
        this.finish();
        return true;
    case R.id.about:
        Intent i = new Intent(this, AboutActivity.class);
        this.startActivity(i);
    case R.id.skip:
        AlertDialog.Builder alertbox = new AlertDialog.Builder(this);

            // set the message to display
            alertbox.setMessage("The yoga pose will be skipped from now on!").show();
           alertbox.setCancelable(true);
           alertbox.setNegativeButton("no").setPositiveButton("OK", new DialogClicklistener() { 

             // click listener on the alert box
            public boolean onClick(DialogInterface arg0, int arg1) {
                // the button was clicked
                boolean success = myDbHelper.setSkip(PoseID);
                SetImageView2(myDbHelper);
                return success;
              }

           });

           // add a neutral button to the alert box and assign a click listener
           alertbox.setCancelable(true).set(onCancelListener) {

              // click listener on the alert box
               public boolean onClick(DialogInterface arg0, int arg1) {
                // the button was clicked

              }
           });
           // show it
           alertbox.show();

     default: 
            return super.onOptionsItemSelected(item);
    }
}

Solution

  • The following is directly from the app I'm currently working on. It brings up an AlertDialog which then takes the user to a different activity (after they enter a password). Please let me know if I can clarify anything about it.

    Edit: whole method now included.

    @Override
    public boolean onOptionsItemSelected(MenuItem item) { 
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
        final int menuItem = item.getItemId();
        if ((menuItem == R.id.survey) || (menuItem == R.id.syncMode)) {
            View layout = inflater.inflate(R.layout.survey_password_dialog, (ViewGroup) findViewById(R.id.layout_root));
            final EditText password = (EditText) layout.findViewById(R.id.passwordText);
            AlertDialog.Builder builder = new AlertDialog.Builder(this);            
            builder.setView(layout)
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {   
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
            final AlertDialog alertDialog = builder.create();
            alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dialog) {
                    Button b = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
                    b.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if (password.getText().toString().equalsIgnoreCase("the_password")) {
                                if (menuItem == R.id.survey) {
                                    Intent intent = new Intent(AsthmaAppActivity.this, SurveyActivity.class);
                                    startActivity(intent);
                                    alertDialog.dismiss();
                                }
                                else { //(menuItem == R.id.syncMode) 
                                    startActivity(new Intent(AsthmaAppActivity.this, SyncMode.class));
                                    alertDialog.dismiss();
                                }
                            }
                            else Toast.makeText(AsthmaAppActivity.this, "Password incorrect", Toast.LENGTH_LONG).show();
                        }
                    });
                }
            });
            alertDialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            alertDialog.show();
        }
        else {  //dialog for setting application parameters "on the fly" for application testing
            View layout = inflater.inflate(R.layout.parameter_change, (ViewGroup) findViewById(R.id.layout_root));
            final EditText parameter = (EditText) layout.findViewById(R.id.parameterText);
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setView(layout)
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {  
                    String parameterString = parameter.getText().toString();
                    if(parameterString == null || parameterString.isEmpty()) {
                        testParam = 0.0;
                    } 
                    else {
                        testParam = Double.parseDouble(parameterString);
                    }
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            })
            .show();
        }
        return(super.onOptionsItemSelected(item));
    }