2017-09-06 17 views
0

私がチャットルームを代表するサーバーからの数値のリストを取得したとしましょう。私は、ループ内で呼び出すことによって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()があります。しかし、私はそのオブジェクトを設定するための兄弟メソッドを見つけることができません...

答えて

0

inValidateOptionMenu();上記のMenuItamメソッドを呼び出すと、onCreateOptionsmenu()メソッドを呼び出すので、グローバル変数を使用して更新された値のチェックを入れることができます。それに応じてUIを変更します。

+0

あなたの 'inValidateOptionMenu/onCreateOptionsmenu'提案が私の問題にどのように役立つかはよく分かりません。それぞれの' MenuItem'に 'Integer'ルーム番号を付けておき、後でそれを取り戻したいと思います。 –

+0

私のソリューションはActionバーまたはツールバーのオプションメニューに基づいており、更新された番号をメニュー項目に更新または表示したい場合、MenuItemのActionViewにカスタムビューを追加してTextViewを取得して値を更新できます。 –

関連する問題