如何在两个ActionBar
项之间切换/切换?
我目前在操作栏中有两个项目,如下面的第一张图片所示 - 请参阅“网格”和“时间轴”图标。
我想只显示一个,当用户触摸它时,它应该与另一个交换。所以说网格项目正在显示,用户触摸它,时间轴项目应该显示,网格项目应该消失。就像第二张图片一样。
我试过这个,但它似乎没有用 - 没有发生交换。
private static final int SHOW_AS_ACTION_NEVER = 0;
private static final int SHOW_AS_ACTION_IF_ROOM = 1;
private static final int SHOW_AS_ACTION_ALWAYS = 2;
private Menu menu;
private MenuItem itemGrid;
private MenuItem itemTimeline;
//...
@Override
public boolean onCreateOptionsMenu(Menu m) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.actionbar, m);
menu = m;
itemTimeline = menu.findItem(R.id.action_timeline);
itemTimeline.setShowAsAction(SHOW_AS_ACTION_NEVER);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem mi) {
switch (mi.getItemId()) {
case R.id.action_timeline:
Toast.makeText(this, "Action grid selected", Toast.LENGTH_SHORT).show();
itemTimeline = menu.findItem(R.id.action_timeline);
itemTimeline.setShowAsAction(SHOW_AS_ACTION_NEVER);
itemGrid = menu.findItem(R.id.action_grid);
itemGrid.setShowAsAction(SHOW_AS_ACTION_ALWAYS);
break;
case R.id.action_settings:
Toast.makeText(this, "Action settings selected", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
答案 0 :(得分:1)
您需要做的是使操作栏菜单无效,以便使用invalidateOptionsMenu()
重新创建
这会回拨onCreateOptionsMenu
再次创建菜单。
您需要的是一些标志,以了解要创建的菜单
答案 1 :(得分:1)
感谢您的回答tyczj,但我通过切换项目的可见性解决了我的问题:
@Override
public boolean onCreateOptionsMenu(Menu m) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.actionbar, m);
menu = m;
itemTimeline = menu.findItem(R.id.action_timeline);
itemGrid = menu.findItem(R.id.action_grid);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem mi) {
switch (mi.getItemId()) {
case R.id.action_timeline:
itemTimeline = menu.findItem(R.id.action_timeline);
itemTimeline.setVisible(false);
itemGrid = menu.findItem(R.id.action_grid);
itemGrid.setVisible(true);
break;
case R.id.action_grid:
itemTimeline = menu.findItem(R.id.action_timeline);
itemTimeline.setVisible(true);
itemGrid = menu.findItem(R.id.action_grid);
itemGrid.setVisible(false);
break;
default:
break;
}
答案 2 :(得分:0)
使用我的切换功能:)
private Menu menu;
private boolean isGridtView
//----------------------------------
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_items, menu);
this.menu = menu;
}
//-----------------------------------
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_change_layoutManager:
// swap between two options
toggle();
return true;
}
return super.onOptionsItemSelected(item);
}
//----------------------------------
private void toggle() {
MenuItem item = menu.findItem(R.id.action_change_layoutManager);
if (!isGridtView) {
// change layout manager type
setRecyclerViewLayoutManager(LayoutManagerType.LINEAR_LAYOUT_MANAGER);
item.setIcon(R.drawable.ic_view_grid_24dp);
isGridtView = true;
} else {
// change layout manager type
setRecyclerViewLayoutManager(LayoutManagerType.GRID_LAYOUT_MANAGER);
item.setIcon(R.drawable.ic_view_list_24dp);
isGridtView = false;
}
}