如何将自定义对象传递给MenuItem,然后再检索它?

如何将自定义对象传递给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。

+0

我不知道你的'inValidateOptionMenu/onCreateOptionsmenu'建议如何帮助我解决问题:我想给每个'MenuItem'附上一个Integer'房间号 - 然后再取回。 –

+0

我的解决方案基于操作栏或工具栏中的选项菜单,如果您想要更新或显示菜单项中更新的数字,以便您可以在MenuItem的ActionView中添加自定义视图,然后检索TextView并更新您的值。 –