2016-04-04 11 views
-2

menuは私のtoolbarに膨らませています。アイテムアイコンをクリックすると、別のアイコンで切り替えることができます。私はlistviewgridviewの間で切り替えることができるようにこれをやっています。2つのメニューアイコンを切り替える方法

私が試したことは、別のmenu.xmlでメニューを再作成することです。しかし、onCreateOptionsMenu(menu)からonOptionsItemSelected(MenuItem item){}に電話するとアプリがクラッシュします。

@Override 
 
    public boolean onOptionsItemSelected(MenuItem item) { 
 
     int id = item.getItemId(); 
 
     if (id == R.id.action_grid) { 
 
      listView.setVisibility(View.INVISIBLE); 
 
      gv.setVisibility(View.VISIBLE); 
 
     //i try to recreate menu again 
 
      onCreateOptionsMenu(menu) 
 

 
     } 
 
     if (id == R.id.action_list) { 
 
      listView.setVisibility(View.VISIBLE); 
 
      gv.setVisibility(View.INVISIBLE); 
 
      //i try to recreate menu again 
 
      onCreateOptionsMenu(menu) 
 
     } 
 

 

 
     return super.onOptionsItemSelected(item); 
 
    }

は、これを達成する方法はありますか?

答えて

0

だけではなくアイコンを変更し、ブールフラグで状態を維持し、メニューを再作成しようとしている:

boolean flag = true; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_grid_list_toggle) { 
     if (boolean) { 
      // Show grid view 
      item.setIcon(R.drawable.ic_grid); 
      listView.setVisibility(View.INVISIBLE); 
      gv.setVisibility(View.VISIBLE); 
     } else { 
      // Show list view 
      item.setIcon(R.drawable.ic_list); 
      listView.setVisibility(View.VISIBLE); 
      gv.setVisibility(View.INVISIBLE); 
     } 
     flag = !flag; // toggle value on every click 
    } 
    return super.onOptionsItemSelected(item); 
} 
1
Menu optionsMenu; 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.refresh_menu, menu); 
    optionsMenu = menu; 
} 

**Somewhere in code** 
final MenuItem refreshItem = optionsMenu 
      .findItem({ID OF MENU Item}); 
refreshItem.setIcon({New Icon Resource}); 
+0

私はこのプロジェクトの1つでこのタイプのことをやっています。上記の私の答えを参照してください。それは非常に簡単で、問題がなくても動作します。 – slackwars

1

あなただけMenuItems

を扱う、メニュー毎回を再作成する必要はありません。
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    String title = item.getTitle().toString(); 
    switch (title) { 
     case TITLE_GRIDVIEW: 
      item.setTitle(TITLE_LISTVIEW); 
      item.setIcon(R.drawable.listview_icon); 
      //switch to gridview 
      return true; 
     case TITLE_LISTVIEW: 
      item.setTitle(TITLE_GRIDVIEW); 
      item.setIcon(R.drawable.gridview_icon); 
      //switch to listview 
      return true; 
    } 
    return false; 
} 

これは、アイテムにバインドされたタイトルに基づいて動作します。この方法で、リストビューとグリッドビューを切り替えるにはメニュー内にアイテムが1つだけ必要です。このアイテムはトグルボタンのように動作します。

関連する問題