私がチャットルームを代表するサーバーからの数値のリストを取得したとしましょう。私は、ループ内で呼び出すことによってNavigationView
メニューに表示し、そのイベントにカスタムオブジェクトをMenuItemに渡して後で取得する方法
:
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);
}
その後、私は、「特定のチャットルームに参加」するために私に言って、サーバから単一番号で別の要求を取得
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
}
:
は現在、私は、そのメニュー項目を見つけるために、文字列のアクロバットを実行する必要があります。そして私は、対応するMenuItem
を見つけると、そのオブジェクトにsetChecked(true)
を呼び出したいです
しかし、メニュー項目を作成している間に部屋番号を渡し、後でそのメニューを繰り返しながらInteger
を取得することをお勧めします。
どうすればいいですか?
MenuItem docには、カスタムオブジェクトを取得する方法getMenuInfo()
があります。しかし、私はそのオブジェクトを設定するための兄弟メソッドを見つけることができません...
あなたの 'inValidateOptionMenu/onCreateOptionsmenu'提案が私の問題にどのように役立つかはよく分かりません。それぞれの' MenuItem'に 'Integer'ルーム番号を付けておき、後でそれを取り戻したいと思います。 –
私のソリューションはActionバーまたはツールバーのオプションメニューに基づいており、更新された番号をメニュー項目に更新または表示したい場合、MenuItemのActionViewにカスタムビューを追加してTextViewを取得して値を更新できます。 –