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

时间:2017-09-06 11:15:44

标签: android menu menuitem submenu navigationview

我们说我从服务器获得一个数字列表,代表聊天室。

在该事件中,我通过调用循环在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()用于检索自定义对象。但我找不到用于设置该对象的兄弟方法......

1 个答案:

答案 0 :(得分:0)

如果要更新MenuItam方法调用inValidateOptionMenu();方法,则应调用方法onCreateOptionsmenu(),以便通过使用全局变量检查更新后的值,并相应地更改UI。