问题描述
我为我的 Wear OS 应用创建了一个 ActionDrawer,并想在运行时更改图标和文本。此代码正在运行,我的应用程序继续运行而没有错误,但我无法再向上滑动 ActionDrawer。此外,当 ActionDrawerMenu 已经打开并且我按下那里的按钮时,它就会消失并且我的应用程序 UI 似乎被冻结了。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Top navigation drawer
WearableNavigationDrawerView wearableNavigationDrawer = (WearableNavigationDrawerView) findViewById(R.id.top_navigation_drawer);
wearableNavigationDrawer.setAdapter(new NavigationDrawerAdapter());
wearableNavigationDrawer.getController().peekDrawer();
//Bottom action drawer
WearableActionDrawerView wearableActionDrawer = (WearableActionDrawerView) findViewById(R.id.bottom_action_drawer);
wearableActionDrawer.getController().peekDrawer();
wearableActionDrawer.setonMenuItemClickListener(this);
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
final int itemId = menuItem.getItemId();
switch(itemId) {
case R.id.menuItem_pause:
if(intent == null) {
menuItem.setIcon(getDrawable(R.drawable.ic_pause));
menuItem.setTitle(R.string.actionDrawerMenuPause);
} else {
menuItem.setIcon(getDrawable(R.drawable.ic_play));
menuItem.setTitle(R.string.actionDrawerMenuStart);
}
invalidateOptionsMenu();
return true;
}
return false;
}
我尝试了一些使用 invalidateOptionsMenu()、onPrepareOptionsMenu() 和 onCreateOptionsMenu() 的解决方案,但没有任何效果。我认为这仅适用于标准的 Android 移动应用程序,但不适用于 Wear OS。那么如何在按下 MenuItem 时更改 WearableActionDrawer-MenuItems 的文本和图标?
解决方法
我偶然找到了解决方案。以编程方式实现菜单只是这一行代码。
//Bottom action drawer
WearableActionDrawerView wearableActionDrawer = findViewById(R.id.bottom_action_drawer);
wearableActionDrawer.getController().peekDrawer();
wearableActionDrawer.setOnMenuItemClickListener(this);
getMenuInflater().inflate(R.menu.action_drawer_menu,wearableActionDrawer.getMenu());