2016-04-04 4 views
-2

У меня есть menu элементы, которые надуты на моем toolbar. Когда один значок menu нажат, я бы хотел переключить его на другой значок и наоборот. Я делаю это так, чтобы я мог переключаться между listview и gridview.Как переключаться между двумя значками меню

То, что я пробовал, - это снова создать меню с другим 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

Я делаю этот точный тип вещей в одном из моих проектов. См. Мой ответ выше. Это очень просто и без проблем. – slackwars

1

Вам не нужно воссоздать меню каждый раз, как раз обрабатывать MenuItems

Он работает на основе привязанного названия к вашему товару. Таким образом вам просто нужен один элемент в вашем меню для переключения между списком и gridview, и эти элементы действуют как кнопка переключения.

Смежные вопросы