[英]Android: click on one MenuItem to make another MenuItem visible in the toolbar
例子:
單擊 Menu3 時,我希望顯示 Menu1 和 Menu2。
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem Menu1 = menu.findItem(R.id.Menu1);
MenuItem Menu2 = menu.findItem(R.id.Menu2);
Menu1.setVisible(false);
Menu2.setVisible(false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Menu3) {
item.setVisible(false);
Menu menu;
menu.findItem(R.id.Menu1).setVisible(true);
return true;
}
return super.onOptionsItemSelected(item);
}
以下代碼不起作用:
Menu menu;
menu.findItem(R.id.Menu1).setVisible(true);
這段代碼:
Menu menu;
menu.findItem(R.id.Menu1).setVisible(true);
將無法工作,因為menu
變量未初始化。 您應該根據需要初始化menu
變量,然后調用 setVisible 方法。
您可以使用一些boolean
變量來設置菜單項的所需狀態。 然后,只要用戶單擊Menu3項,您就更改boolean
值並調用invalidateOptionsMenu();
. 這將導致重新創建菜單,因此其他菜單項將根據需要顯示:
public class MainActivity extends AppCompatActivity
{
private boolean showMenu1, showMenu2;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set the initial state here:
showMenu1 = false;
showMenu2 = false;
...
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.findItem(R.id.Menu1).setVisible(showMenu1);
menu.findItem(R.id.Menu2).setVisible(showMenu2);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();
if (id == R.id.Menu3)
{
showMenu1 = true;
showMenu2 = true;
invalidateOptionsMenu();
return true;
}
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.