I added a custom menu to the menu button using the following code:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
if (getDisplayedView() instanceof WorkspaceView) {
((WorkspaceView) getDisplayedView()).showEditMenu();
}
return true;
}
and
public void showEditMenu() {
new EditMenu(lexs, ((Project) projects.getSelectedItem()).getName(), ((ProjectList) projectsList.getSelectedItem()).getName()).show();
}
The EditMenu is implemented the following way:
public class EditMenu {
private final String DELETE_PROJECT = "Projekt löschen";
private final String DELETE_LIST = "Liste löschen";
private final String RENAME_PROJECT = "Projekt umbenennen";
private final String RENAME_LIST = "Liste umbenennen";
private final String CLOSE = "Menü schliessen";
private Context context;
private String projectName;
private String listName;
private AlertDialog alert;
private final CharSequence[] items = {DELETE_PROJECT, DELETE_LIST, RENAME_PROJECT, RENAME_LIST, CLOSE};
public EditMenu(Context context, String projectName, String listName) {
this.context = context;
this.projectName = projectName;
this.listName = listName;
}
public void show() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(projectName + ": " + listName);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals(DELETE_PROJECT)) {
deleteProject();
} else if (items[item].equals(DELETE_LIST)) {
deleteList();
} else if (items[item].equals(RENAME_PROJECT)) {
renameProject();
} else if (items[item].equals(RENAME_LIST)) {
renameList();
} else if (items[item].equals(CLOSE)) {
close();
}
}
});
alert = builder.create();
alert.show();
}
private void deleteProject() {
}
private void deleteList() {
}
private void renameProject() {
}
private void renameList() {
}
private void close() {
}
}
This works correctly if I click the menu button the first time. But if the context menu is closed and i click the menu button a second time, nothing happens.
I also tried to call
alert.close(), alert.hide(), alert.dismiss(), etc in the method close(), but it doesn't improve the situation. any hints? thankS¨!
Since there is no other answer in almost 3 weeks, I'll answer my question by myself:
Instead of overwriting
public boolean onCreateOptionsMenu(Menu menu)
one has to override
public boolean onPrepareOptionsMenu(Menu menu)
Here a short example how to do it:
In the activity there is the following code:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
showMenu();
return true;
}
private void showMenu() {
EditMenu menu = new EditMenu(this, "Pacman Menu");
menu.show();
}
Then the clsas EditMenu looks for example the following way:
public class EditMenu {
private final String QUIT = "Quit";
private final String RESTART = "New Game";
private final String SOUND = "Switch Sound";
private final String PAUSE = "Un/pause";
private final CharSequence[] items = new CharSequence[] {QUIT, RESTART, SOUND, PAUSE};
private Context context;
private String title;
private AlertDialog alert;
private MenuListener listener = new MenuListener();
public EditMenu(Context context, String title) {
this.context = context;
this.title = title;
}
public void show() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.splashscreen);
builder.setTitle(title);
builder.setItems(items, listener);
alert = builder.create();
alert.show();
}
private class MenuListener implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals(QUIT)) {
((PacmanGame) context).quitGame();
} else if (items[item].equals(RESTART)) {
((PacmanGame) context).restart();
} else if (items[item].equals(SOUND)) {
Sound.setSoundOn(! Sound.isSoundOn());
} else if (items[item].equals(PAUSE)) {
((PacmanGame) context).getGameBoard().setPausing(!(((PacmanGame) context).getGameBoard().isPaused()));
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With