質問

I have created an inflater menu which brings up two buttons, one links to a list of clickable items, which when clicked closes the menu and returns to the main screen view. However the other button brings up a list of radio buttons which work but the return key has to be pressed to close this menu. I want it to just close automatically once one of the options has been selected.

Any suggestions on how to make this happen would be much appreciated, thanks in advance for any help.

Here's my code:

@Override
public boolean onCreateOptionsMenu(Menu menu) { //creates the menu options that appear when the menu button is pressed
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);
    return true;
} 
public boolean onOptionsItemSelected(MenuItem item) { // assigns one button in the menu to display Rhythm and then further options

    final CharSequence[] Rhythms = {"Sinus Rhythm", "Atrial Fibulation", "Atrial Flutter", "Junctional Rhythm", "SVT", "Ventricular Tachycardia"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Interpretation of ECG waveform");
    builder.setItems(Rhythms, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int Rhythm) {
            Toast.makeText(getApplicationContext(), Rhythms[Rhythm], Toast.LENGTH_SHORT).show(); // add a save function here to utilise the onclick function
        }                                                                                        // saved file should match the ecg file name and also be loaded when app is started
    });
    final CharSequence[] annotations = {"A", "B", "B-","C", "C-", "D", "F"}; // assigns a new button with the annotation options

    AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
    builder1.setTitle("Evaluate ECG quality");
    builder1.setSingleChoiceItems(annotations, 0, new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int item) {
             Toast.makeText(getApplicationContext(), annotations[item], Toast.LENGTH_SHORT).show();  // again add a save function here, this should be able to override the 
                                                                                                     // annotation coding written by Daniel.
        }
    });

           setCancelable(true);    

    switch (item.getItemId()) { 

    case R.id.annotatebutton: // when annotation button is click display annotation options
        builder1.show();
        return true;

    case R.id.rhythmbutton: // when rhythm button is clicked display rhythm options
        builder.show();        
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
役に立ちましたか?

解決

case R.id.annotatebutton:
    builder1.show();
    closeOptionsMenu();
    return true;
case R.id.rhythmbutton:
    builder.show();        
    closeOptionsMenu();
    return true;
default:
    return super.onOptionsItemSelected(item);

You can close the options menu programmatically with closeOptionsMenu()

see http://developer.android.com/reference/android/app/Activity.html#closeOptionsMenu()

他のヒント

add this line: dialog.dismiss();

    final CharSequence[] annotations = {"A", "B", "B-", "C", "C-", "D", "F"}; // assigns a new button with the annotation options
    AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
    AlertDialog alert;
    builder1.setTitle("Evaluate ECG quality");
    builder1.setSingleChoiceItems(annotations, -1, new DialogInterface.OnClickListener() { //change it by -1
        public void onClick(DialogInterface dialog, int item) {
            Toast.makeText(getApplicationContext(), annotations[item], Toast.LENGTH_SHORT).show();  // again add a save function here, this should be able to override the
            dialog.dismiss(); //add this line
            // annotation coding written by Daniel.
        }
    });

    final CharSequence[] Rhythms = {"Sinus Rhythm", "Atrial Fibulation", "Atrial Flutter", "Junctional Rhythm", "SVT", "Ventricular Tachycardia"};
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Interpretation of ECG waveform");
    builder.setItems(Rhythms, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int Rhythm) {
            Toast.makeText(getApplicationContext(), Rhythms[Rhythm], Toast.LENGTH_SHORT).show(); // add a save function here to utilise the onclick function
        }                                                                                        // saved file should match the ecg file name and also be loaded when app is started
    });

    switch (item.getItemId()) {

        case R.id.op_uno: // when annotation button is click display annotation options
            builder1.show();
            //closeOptionsMenu();
            return true;

        case R.id.op_dos: // when rhythm button is clicked display rhythm options
            builder.show();
            //closeOptionsMenu();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top