日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem?

發(fā)布時間:2023/12/2 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在Android的“選項”菜單上更改MenuItem?

我的Activity上有一個選項菜單,帶有mymenu.xml“開始”。 選擇此3000128611611048489985后,我想更改菜單,使其包含MenuItem“停止”。 最后,當選擇“停止”時,我想改回“開始”。

這是我的部分代碼無法正常工作。 我在mymenu.xml中同時列出了“開始”和“停止”,創(chuàng)建菜單時可能應該刪除“停止”:

public class MyActivity extends Activity {

private boolean isStarted = false;

@Override

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

menu.removeItem(R.id.stop);

inflater.inflate(R.menu.mymenu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.start:

isStarted = true;

return true;

case R.id.stop:

isStarted = false;

return true;

default:

return super.onOptionsItemSelected(item);

}

}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

if(isStarted) {

menu.removeItem(R.id.start);

menu.add(R.id.stop);

} else {

menu.removeItem(R.id.stop);

menu.add(R.id.start);

}

return true;

}

}

6個解決方案

96 votes

對于這種類型的操作,我通常選擇不更改菜單項,而只隱藏不需要的菜單項:

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

super.onPrepareOptionsMenu(menu);

menu.findItem(R.id.start).setVisible(!isStarted);

menu.findItem(R.id.stop).setVisible(isStarted);

return true;

}

Flygenring answered 2020-08-07T00:15:15Z

20 votes

Flygenring的答案是正確的,但是menu.findItem()太慢了,在onPrepareOptionsMenu(Menu menu)中調用它會產生不良的用戶體驗。 最好在創(chuàng)建菜單時獲取一次MenuItem對象,然后每次在屏幕上出現菜單時都調用setVisible:

MenuItem mDynamicMenuItem;

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

// Get dynamic menu item

mDynamicMenuItem = menu.findItem(R.id.menu_item);

return true;

}

// Prepare the Screen's standard options menu to be displayed. This is called right

// before the menu is shown, every time it is shown. You can use this method to

// efficiently enable/disable items or otherwise dynamically modify the contents.

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

super.onPrepareOptionsMenu(menu);

// Here is just a good place to update item

mDynamicMenuItem.setVisible(isVisible);

return true;

}

i.shadrin answered 2020-08-07T00:15:35Z

6 votes

完成更改后,可能需要調用super.onPrepareOptionsMenu。 從文檔:

派生類應始終調用 直到基層 實施。

Cheryl Simon answered 2020-08-07T00:16:00Z

3 votes

我找到了解決方案。 調用false時,基本上就是刪除MenuItem,因此也刪除了引用。 使用此代碼有效。

private boolean isStarted = false;

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case 1:

isStarted = true;

return true;

case 0:

isStarted = false;

return true;

default:

return super.onOptionsItemSelected(item);

}

}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

if(isStarted) {

menu.removeItem(1);

menu.add(0, 0, 0, "Stop");

} else {

menu.removeItem(0);

menu.add(0, 1, 0, "Start");

}

return super.onPrepareOptionsMenu(menu);

}

您必須再次創(chuàng)建MenuItem。 那也是false標簽的原因。 實際上,當您通過代碼創(chuàng)建Menu時,您不需要MenuInflater,因此也不需要任何菜單XML文件。

Octavian Damiean answered 2020-08-07T00:16:24Z

1 votes

感謝您提供這篇文章中的信息,因為它解決了我菜單中錯誤標簽的問題。 我確實需要對其進行一些修改,并使其最終代碼可以正常工作,如下所示,希望它可以節(jié)省其他人的時間和挫敗感。 它的解決方案稍有不同,但我所做的主要更改是將.setVisible更改為True或False,除了i.shadrins解決方案最適合我的需求。

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

super.onPrepareOptionsMenu(menu);

if(loggedIn)

{

logIn.setVisible(false);

logOut.setVisible(true);

}

else

{

logIn.setVisible(true);

logOut.setVisible(false);

}

return true;

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

logIn = menu.findItem(R.id.loggedOut);

logOut = menu.findItem(R.id.loggedIn);

return true;

}

timv answered 2020-08-07T00:16:45Z

0 votes

在Android 3.0及更高版本上,您應該調用invalidateOptionsMenu()來請求系統(tǒng)調用onPrepareOptionsMenu()。 然后,您可以在方法中修改選項菜單。 您可以在[https://developer.android.com/guide/topics/ui/menus#options-menu]中查看Android文檔的“在運行時更改菜單項”部分,以了解更多詳細信息。

Dara answered 2020-08-07T00:17:05Z

總結

以上是生活随笔為你收集整理的android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。