Я пытаюсь настроить записи меню для своего приложения Glass, используя приведенный здесь ответ How do you customise Glass contextual voice menu in an immersion *after* its initial setup?, но меню никогда не воссоздается.invalidateOptionsMenu не воссоздает меню на стекле
Приложение - это мой окончательный университетский проект для автоматизации дома. Когда пользователь включит свет, я бы хотел, чтобы опция «включить свет» была скрыта, и «выключить свет» станет видимым.
Вот некоторые из моего кода:
@Override
public boolean onPreparePanel(int featureId, View view, Menu menu) {
mPreparePanelCalled = true;
if (isMyMenu(featureId)) {
shouldFinishOnMenuClose = true;
MenuItem menuLightOn = menu.findItem(R.id.action_turn_on_light);
MenuItem menuLightOff = menu.findItem(R.id.action_turn_off_light);
if (menuLight) {
menuLightOn.setVisible(false);
menuLightOff.setVisible(true);
} else {
menuLightOn.setVisible(true);
menuLightOff.setVisible(false);
}
return !mIsFinishing;
}
return super.onPreparePanel(featureId, view, menu);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (isMyMenu(featureId)) {
shouldFinishOnMenuClose = true;
// Handle item selection.
switch (item.getItemId()) {
case R.id.action_unlock_door:
try {
handleUnlockDoor();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_lock_door:
try {
handleLockDoor();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_turn_on_light:
try {
handleTurnOnLight();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_turn_off_light:
try {
handleTurnOffLight();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_set_thermostat:
handleSetThermostat();
break;
case R.id.action_turn_on_kettle:
try {
handleTurnOnKettle();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_turn_off_kettle:
try {
handleTurnOffKettle();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.action_stop:
handleStop();
break;
}
}
invalidateOptionsMenu();
getWindow().invalidatePanelMenu(WindowUtils.FEATURE_VOICE_COMMANDS);
return super.onMenuItemSelected(featureId, item);
}
И тогда, когда соответствующая функция вызывается, булево значение изменяется:
private void handleTurnOnLight() throws IOException {
String retrievedData = null;
try {
retrievedData = new RetrieveData().execute(ServerUrl.serverUrl + "/lighton").get();
menuLight = true;
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(this, retrievedData, Toast.LENGTH_LONG).show();
LiveCardService.refreshLiveCard(this);
}
private void handleTurnOffLight() throws IOException {
String retrievedData = null;
try {
retrievedData = new RetrieveData().execute(ServerUrl.serverUrl + "/lightoff").get();
menuLight = false;
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(this, retrievedData, Toast.LENGTH_LONG).show();
LiveCardService.refreshLiveCard(this);
}
Я настоящий новичок в разработке стекла, поэтому любой совет будет очень признателен.
спасибо.
Большое спасибо за быстрый ответ, я попробовал оба ваши предложения, но, к сожалению, они не работали для меня. Если вы хотите посмотреть на весь мой код, он доступен по адресу https://github.com/sephallen/HomeAutomationForGlass –