如何将自定义对象传递给MenuItem,然后再检索它?
问题描述:
比方说,我从服务器获取一个表示聊天室的数字列表。如何将自定义对象传递给MenuItem,然后再检索它?
在这种情况下我在NavigationView
菜单调用在循环显示出来:
private NavigationView mNavigationView;
private SubMenu mMenuRooms;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mMenuRooms = mNavigationView.getMenu().findItem(R.id.item_rooms).getSubMenu();
}
@Override
public void onTextMessage(WebSocket websocket, String str) throws Exception {
...
for (Room room: rooms) {
mMenuRooms.add("Chat room #" + room.id).setCheckable(true);
}
再后来我得到来自服务器的单号另一个请求告诉我“加入特定的聊天室”我想找到相应的MenuItem
和对对象调用setChecked(true)
:
目前我有执行字符串杂技找到该菜单项:
String title = "Chat room #" + id;
for (int i = mMenuRooms.size() - 1; i >= 0; i--) {
MenuItem item = mMenuRooms.getItem(i);
item.setChecked(title.equals(item.getTitle()); // a hack using menu item title
}
但是,我希望将房间号码传递到菜单项,因为我正在创建它 - 稍后在迭代菜单时检索Integer
。
请问该怎么办?
在MenuItem doc中有一个方法getMenuInfo()
用于检索自定义对象。但是我无法找到设置该对象的兄弟姐妹方法...
答
你应该调用一个方法inValidateOptionMenu();
当你想使用全局变量来更新MenuItam上述方法调用onCreateOptionsmenu()
方法,所以你可以把检查更新后的价值,相应地更改UI。
我不知道你的'inValidateOptionMenu/onCreateOptionsmenu'建议如何帮助我解决问题:我想给每个'MenuItem'附上一个Integer'房间号 - 然后再取回。 –
我的解决方案基于操作栏或工具栏中的选项菜单,如果您想要更新或显示菜单项中更新的数字,以便您可以在MenuItem的ActionView中添加自定义视图,然后检索TextView并更新您的值。 –