Sometimes, it is also useful to distinguish between the first time to a menu (redraw everything) vs. returning to the same menu (only update what is needed). This is the approach of a finite state machine (google it, if interested) and then you get something more like
...
bool inSettingsState = false;
void loop() {
if ( checkButtons() ) {
inSettingsState = !inSettingsState;
if ( inSettingsState == true ) {
beginSettingsMenu();
}
else {
beginRunMenu();
}
}
if ( inSettingsState == true ) {
// do Settings things
updateSettingsMenu();
}
else {
// do regular things
updateRunMenu();
}
}
...