Làm cách nào để ẩn một mục menu trong thanh hành động?


346

Tôi có một thanh hành động với một menuitem. Làm thế nào tôi có thể ẩn / hiển thị mục menu đó?

Đây là những gì tôi đang cố gắng làm:

MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();

Câu trả lời:


484

Chỉ vào một MenuItemmục như vậy, gọi setVisiblenó để điều chỉnh mức độ hiển thị của nó và sau đó gọiinvalidateOptionsMenu() về hoạt động của bạn để menu ActionBar được điều chỉnh cho phù hợp.

Cập nhật: A MenuItemkhông phải là chế độ xem thông thường, đó là một phần trong bố cục của bạn. Đó là một cái gì đó đặc biệt, hoàn toàn khác nhau. Lợi nhuận mã của bạn nullcho itemvà đang gây ra vụ tai nạn. Thay vào đó, những gì bạn cần là làm:

MenuItem item = menu.findItem(R.id.addAction);

Đây là chuỗi mà bạn nên gọi: cuộc gọi đầu tiên invalidateOptionsMenu()và sau đó bên trong onCreateOptionsMenu(Menu)có được một tham chiếu đến MenuItem (bằng cách gọi menu.findItem()) và gọi setVisible()


Đây là những gì tôi nghĩ ban đầu, nhưng điều này làm hỏng ứng dụng.
Khuấy Zoltán

3
@Stir Zoltán: Đó là cách bạn làm điều đó, bạn có thể làm sai nếu nó làm hỏng ứng dụng. Ví dụ, bạn MenuItemcó thể là nullvì bạn đang sử dụng getItemthay vì findItem. Chúng tôi không bao giờ có thể biết, mà không thấy cả mã của bạn và nhật ký sự cố.
K-ballo

OK nhưng làm thế nào tôi có thể có được một tham chiếu đến menu bên ngoài phương thức onCreateOptionsMothy?
Khuấy Zoltán

7
@Stir Zoltán: Tôi tin rằng bạn không có ý nghĩa gì với bình luận cuối cùng đó ... Đơn giản chỉ cần tham khảo mục menu của bạn tại onCreateOptionsMenu, và đặt mức độ hiển thị của mục tại thời điểm đó. Hoặc giữ tài liệu tham khảo xung quanh cho đến khi bạn quyết định xem nó có thể nhìn thấy hay không.
K-ballo

33
Tôi nghĩ rằng (tốt nhất) câu trả lời này là từ kém vì trình tự các bước là sai. Trình tự đúng là cuộc gọi đầu tiên invalidateOptionsMenu()và sau đó bên trong onCreateOptionsMenu(Menu)có được một tham chiếu đến MenuItem(bằng cách gọi menu.findItem()) và gọi setVisible()nó. Các câu trả lời của suhas_smbởi P1r4nh4 trình bày cách tiếp cận đúng.
Ted Hopp

163

Tìm thấy một phụ lục cho câu hỏi này:

Nếu bạn muốn thay đổi mức độ hiển thị của các mục trong menu, bạn chỉ cần đặt biến thành viên trong hoạt động để nhớ rằng bạn muốn ẩn menu và gọi invalidateOptionsMenu()và ẩn các mục trong onCreateOptionsMenu(...)phương thức ghi đè của bạn .

//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == HIDE_MENU)
    {
        for (int i = 0; i < menu.size(); i++)
            menu.getItem(i).setVisible(false);
    }
}

Trong ví dụ của tôi, tôi đã ẩn tất cả các mục.


2
Đây chính xác là những gì tôi đang tìm kiếm. giữ MenuItem và gọi setVisible () dường như không làm những gì tôi mong đợi (có thể vì tôi đã gọi không hợp lệOptionsMothy () sau đó, do đó xây dựng lại menu), nhưng dù sao đi nữa - điều này hoạt động chính xác như tôi hy vọng, cảm ơn!
Matt

4
Nếu bạn định giấu mọi mục, có một cách dễ dàng hơn. Thay vì lặp qua từng mục ở đây, bạn chỉ có thể thực hiện: if (HIDE_MENU) { return false; } else { getSupportMenuInflater().inflate(R.menu.menu_settings, menu); return true; }Trạng thái tài liệu: "Bạn phải trả về đúng cho menu được hiển thị; nếu bạn trả về sai, nó sẽ không được hiển thị".
w3bshark

Ngoài ra, tôi muốn đề cập rằng phương pháp này sạch hơn nhiều so với câu trả lời được chấp nhận. Cám ơn vì đã chia sẻ!
w3bshark

bằng cách gọi không hợp lệOptionMothy () onCreateOptionMothy () đã gọi và tôi xử lý các điều kiện của mình trong onCreateOptionMothy (). Cảm ơn câu trả lời tốt
user1912026

onPrepareOptionsMenu()nên được sử dụng để hiển thị / ẩn logic thay vì onCreateOptionsMenu()nó chỉ được gọi một lần nên không hữu ích nếu bạn muốn thay đổi các mục menu sau khi khởi tạo. Vì vậy, tăng cường onCreate, nhưng hiển thị / ẩn trong onPrepare.
JCocking8

89

Đúng.

  1. Bạn có thể đặt cờ / điều kiện.
  2. Gọi invalidateOptionsMenu()khi bạn muốn ẩn tùy chọn. Cái này sẽ gọi onCreateOptionsMenu().
  3. Trong onCreateOptionsMenu(), kiểm tra cờ / điều kiện và hiển thị hoặc ẩn nó theo cách sau:
MenuItem item = menu.findItem(R.id.menu_Done);

if (flag/condition)) {
  item.setVisible(false); 
} else { }

2
Không nên invalidateOptionsMenuthay thế invalidateOptions?
razz

3
Nếu bạn đặt cờ của mình thành boolean, bạn chỉ có thể đặt mức độ hiển thị của vật phẩm thành cờ (hoặc! Flag) nếu cần. Vì vậy, item.setVvdility (! Flag); làm cho điều này một lót không có điều kiện nếu.
jwehrle

biến "menu" được định nghĩa ở đâu?
Jonathan

Nó được chuyển qua như một tham số choonCreateOptionsMenu
suhas_sm

sử dụng phương pháp này sẽ có nghĩa là vật phẩm vẫn tiêu tốn dung lượng và bạn có thể sẽ có một "khoảng trống" trong giao diện người dùng của mình, nơi cần có nút. Sử dụng removeItem trong onPrepareOptionsMothy () sẽ thực hiện thủ thuật.
JCocking8

39

Bạn có thể gọi đây:

MenuItem item = menu.findItem(R.id.my_item);
item.setVisible(false);

Cập nhật:

Hãy chắc chắn rằng mã của bạn không trả về nullcho itemhoặc nó có thể sụp đổ các ứng dụng.


sử dụng phương pháp này sẽ có nghĩa là vật phẩm vẫn tiêu tốn dung lượng và bạn có thể sẽ có một "khoảng trống" trong giao diện người dùng của mình, nơi cần có nút. Sử dụng removeItem trong onPrepareOptionsMothy () sẽ thực hiện thủ thuật.
JCocking8

33

Tôi đang tìm kiếm một câu trả lời với một chút bối cảnh. Bây giờ tôi đã tìm ra nó, tôi sẽ thêm câu trả lời đó.

Nút ẩn theo mặc định trong menu xml

Theo mặc định, nút chia sẻ sẽ bị ẩn, như được đặt bởi android:visible="false".

nhập mô tả hình ảnh ở đây

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- hide share button by default -->
    <item
        android:id="@+id/menu_action_share"
        android:icon="@drawable/ic_share_white_24dp"
        android:visible="false"     
        android:title="Share"
        app:showAsAction="always"/>

    <item
        android:id="@+id/menu_action_settings"
        android:icon="@drawable/ic_settings_white_24dp"
        android:title="Setting"
        app:showAsAction="ifRoom"/>

</menu>

Hiển thị nút trong mã

Nhưng nút chia sẻ có thể tùy chọn được hiển thị dựa trên một số điều kiện.

nhập mô tả hình ảnh ở đây

MainActivity.java

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    MenuItem shareItem = menu.findItem(R.id.menu_action_share);

    // show the button when some condition is true
    if (someCondition) {        
        shareItem.setVisible(true);
    }

    return true;
}

Xem thêm


onPrepareOptionsMothy () nên được sử dụng để hiển thị / ẩn logic thay vì onCreateOptionsMothy () vì nó chỉ được gọi một lần nên không hữu ích nếu bạn muốn thay đổi các mục menu sau khi khởi tạo. Vì vậy, tăng cường onCreate, nhưng hiển thị / ẩn trong onPrepare, sau đó sử dụng invalidateOptionsMenu()để làm mới menu.
JCocking8

24

không làm việc cho tôi. Tôi đã phải sử dụng rõ ràng onPrepareOptionsMenuđể thiết lập một mục vô hình.

Vì vậy, sử dụng onCreateOptionsMenuđể tạo menu và onPrepareOptionsMenuthay đổi khả năng hiển thị, vv


1
Đối với tôi, nó hoạt động theo cả hai cách, nhưng dựa trên tài liệu của Android onPrepareOptionsMenu có vẻ như là nơi phù hợp để thực hiện loại hoạt động này: "Chuẩn bị menu tùy chọn tiêu chuẩn của Màn hình sẽ được hiển thị. Điều này được gọi ngay trước khi menu được hiển thị, mỗi khi nó được hiển thị . Bạn có thể sử dụng phương pháp này để bật / tắt các mục một cách hiệu quả hoặc tự động sửa đổi nội dung. "
yuval

Vâng, đây là lý tưởng. onPrepareOptionsMothy () nên được sử dụng để hiển thị / ẩn logic thay vì onCreateOptionsMothy () vì nó chỉ được gọi một lần nên không hữu ích nếu bạn muốn thay đổi các mục menu sau khi khởi tạo. Vì vậy, tăng cường onCreate, nhưng hiển thị / ẩn trong onPrepare, sau đó sử dụng invalidateOptionsMenu()để làm mới menu.
JCocking8

9

Ban đầu đặt mức độ hiển thị của mục menu thành false trong tệp bố cục menu như sau:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:visible="false"
        android:id="@+id/action_do_something"
        android:title="@string/txt_do_something"
        app:showAsAction="always|withText"
        android:icon="@drawable/ic_done"/>
</menu>

Sau đó, bạn có thể chỉ cần đặt mức độ hiển thị của mục menu thành false trong onCreateOptionsMothy () sau khi làm tăng menu.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(menu,R.menu.menu);
    MenuItem item = menu.findItem(R.id.menuItemId);
    if (item != null){
        item.setVisible(false);
    }
}

onCreateOptionsMothy không trả về giá trị boolean. Các giải pháp làm việc hoàn hảo mặc dù.
Joseph

8

Thử cái này:

MenuItem myitem = menu.findItem(R.id.my_item);
myitem.setVisible(false);

7

Điều này làm việc cho tôi từ cả Hoạt động và Mảnh vỡ

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (menu.findItem(R.id.action_messages) != null)
        menu.findItem(R.id.action_messages).setVisible(false);
}

1
Trong trường hợp của tôi, onPrepareOptionsMothy trả về boolean, không phải void.
CoolMind

6

Câu trả lời P1r4nh4 hoạt động tốt, tôi chỉ đơn giản hóa nó bằng cờ boolean:

public int mState = 0; //at the top of the code
//where you want to trigger the hide action
mState = 1; // to hide or mState = 0; to show
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == 1) //1 is true, 0 is false
    {
        //hide only option 2
            menu.getItem(2).setVisible(false);
    }
}

2
Sử dụng 01không phải là "cờ boolean", đó là giả boolean. ngoài ra, không có lý do để sử dụng một boolean thực tế ở đây.
Ingo Bürk

2
Ngoài ra, bạn có thể có một số trạng thái, không chỉ một để ẩn và một để hiển thị. Tùy thuộc vào mức độ phức tạp của ứng dụng của bạn và việc bạn từ chối viết các hoạt động mới cho trạng thái ứng dụng mới, bạn có thể có trạng thái SHOW_ALL, trạng thái HIDE_ALL, nhưng cũng có trạng thái HIDE_EDIT hoặc HIDE_SHARE trong trường hợp bạn muốn ẩn một số phần nhất định trong menu.
P1r4nh4

4

Theo trang web chính thức của nhà phát triển Android, OnCreateOptionMothy (menu Menu) không được đề xuất để thay đổi các mục hoặc biểu tượng menu, mức độ hiển thị..vv tại Runtime.

Sau khi hệ thống gọi onCreateOptionsMothy (), nó sẽ giữ lại một thể hiện của Menu bạn điền và sẽ không gọi lại onCreateOptionsMothy () trừ khi vì lý do nào đó menu bị vô hiệu. Tuy nhiên, bạn chỉ nên sử dụng onCreateOptionsMothy () để tạo trạng thái menu ban đầu và không thực hiện thay đổi trong vòng đời hoạt động.

Nếu bạn muốn sửa đổi menu tùy chọn dựa trên các sự kiện xảy ra trong vòng đời hoạt động, bạn có thể làm như vậy trong phương thức onPrepareOptionsMothy (). Phương thức này chuyển cho bạn đối tượng Menu như hiện tại để bạn có thể sửa đổi nó, chẳng hạn như thêm, xóa hoặc vô hiệu hóa các mục. (Các đoạn cũng cung cấp một cuộc gọi lại onPrepareOptionsMothy ().) - Trang web chính thức củaAndroidDeveloper -

Khi được giới thiệu Bạn có thể sử dụng phương thức onOptionsItemSelected (mục MenuItem) này theo dõi đầu vào của người dùng.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.edit) {
        Intent intent = new Intent(this, ExampleActivity.class);
        intent.putExtra(BUNDLE_KEY, mConnection);
        startActivityForResult(intent, PICK_CHANGE_REQUEST);
        return true;
    } else if (id == R.id.delete) {
        showDialog(this);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

Nếu bạn cần thay đổi Mục menu trong thời gian chạy, Bạn có thể sử dụng onPrepareOptionsMothy (Menu menu) để thay đổi chúng

@Override
public boolean onPrepareOptionsMenu(Menu menu){

    if (Utils.checkNetworkStatus(ExampleActivity.this)) {
        menu.findItem(R.id.edit).setVisible(true);
        menu.findItem(R.id.delete).setVisible(true);
    }else {
        menu.findItem(R.id.edit).setVisible(false);
        menu.findItem(R.id.delete).setVisible(false);
    }
    return true;
} 

một số mục luôn hiển thị, vì vậy khi tôi setVisible(false)đối với mục luôn hiển thị, nó sẽ không biến mất cho đến khi tôi nhấp vào ba dấu chấm (chính Menu). Nếu tôi sử dụng invalidateOptionsMenu()trong onPrepareOptionsMenucác mục ngay lập tức tự tổ chức lại, nhưng họ sẽ mất hành động của họ (nếu tôi nhấp vào bất kỳ mục nào, thì không có gì).
Aliton Oliveira

3

đặt một giá trị cho một biến và gọi không hợp lệOptionsMothy ();

ví dụ

    selectedid=arg2;
            invalidateOptionsMenu();


 public boolean onPrepareOptionsMenu(Menu menu) {

    if(selectedid==1){
        menu.findItem(R.id.action_setting).setVisible(false);
        menu.findItem(R.id.action_s2).setVisible(false);
        menu.findItem(R.id.action_s3).setVisible(false);
    }
    else{
        if(selectedid==2){
            menu.findItem(R.id.action_search).setVisible(false);
            menu.findItem(R.id.action_s4).setVisible(false);
            menu.findItem(R.id.action_s5).setVisible(false);
        }
    }
    return super.onPrepareOptionsMenu(menu);
}

một số mục luôn hiển thị, vì vậy khi tôi setVisible(false)đối với mục luôn hiển thị, nó sẽ không biến mất cho đến khi tôi nhấp vào ba dấu chấm (chính Menu). Nếu tôi sử dụng invalidateOptionsMenu()trong onPrepareOptionsMenucác mục ngay lập tức tự tổ chức lại, nhưng họ sẽ mất hành động của họ (nếu tôi nhấp vào bất kỳ mục nào, thì không có gì).
Aliton Oliveira

3

Bạn có thể sử dụng toolbar.getMenu().clear();để ẩn tất cả các mục menu cùng một lúc


@Ajeet_Yadav có cách nào để hiển thị menu sau khi bạn xóa nó không?
Shawn

3

Bằng cách đặt Hiển thị của tất cả các mục trong Menu, menu thanh ứng dụng hoặc menu tràn sẽ tự động Ẩn

Thí dụ

private Menu menu_change_language;

...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    menu_change_language.findItem(R.id.menu_change_language)
           .setVisible(true);

    return super.onCreateOptionsMenu(menu);
}

Trước khi đi đến đoạn khác, sử dụng mã dưới đây:

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

2

https://stackoverflow.com/a/21215280/466363 - được trả lời bởi Look Alterno và Sufian

  • ActivityCompat.invalidateOptionsMothy () không gọi lại onPrepareOptionsMothy (); Nó chỉ cập nhật menu trực tiếp.
  • Một sốMethod () của tôi được gọi từ một số nơi, ngay cả trước khi onCreateOptionsMothy (), vì vậy tôi phải kiểm tra mMothy! = Null.
  • nên hoạt động bằng API 8

.

private Menu mMenu;
   @Override
   public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
       inflater.inflate(R.menu.track_fragment, menu);
       mMenu = menu;
       }
   ...
   private void someMethod() {
   ...
       if (mMenu != null) {
          MenuItem item = mMenu.findItem(R.id.new_track);
          if (item != null) {
               item.setVisible(false);
               ActivityCompat.invalidateOptionsMenu(this.getActivity());
           }
       }
   ...
   }
  • ActivityCompat.invalidateOptionsMothy () không gọi lại onPrepareOptionsMothy (); Nó chỉ cập nhật menu trực tiếp.

  • Một sốMethod () của tôi được gọi từ một số nơi, ngay cả trước khi onCreateOptionsMothy (), vì vậy tôi phải kiểm tra mMothy! = Null.

  • nên hoạt động bằng API 8

2

Nếu bạn đã làm mọi thứ như trong các câu trả lời ở trên, nhưng một mục menu vẫn hiển thị, hãy kiểm tra xem bạn có tham chiếu đến tài nguyên duy nhất không . Chẳng hạn, trong onCreateOptionsMothy hoặc onPrepareOptionsMothy

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuOpen = menu.findItem(R.id.menu_open);
    menuOpen.setVisible(false);
}

Ctrl + Nhấp vào R.id.menu_open và kiểm tra xem nó chỉ tồn tại trong một tệp menu. Trong trường hợp khi tài nguyên này đã được sử dụng ở bất cứ đâu và được tải trong một hoạt động, nó sẽ cố gắng ẩn ở đó.


2

Cách tốt nhất để ẩn tất cả các mục trong menu chỉ bằng một lệnh là sử dụng "nhóm" trên menu xml của bạn. Chỉ cần thêm tất cả các mục menu sẽ có trong menu tràn của bạn trong cùng một nhóm.

Trong ví dụ này, chúng tôi có hai mục menu sẽ luôn hiển thị (mục thông thường và tìm kiếm) và ba mục tràn:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/someItemNotToHide1"
        android:title="ITEM"
        app:showAsAction="always" />

    <item
        android:id="@+id/someItemNotToHide2"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>

    <group android:id="@+id/overFlowItemsToHide">
    <item android:id="@+id/someID" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID2" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID3" 
    android:orderInCategory="1" app:showAsAction="never" />
    </group>
</menu>

Sau đó, trên hoạt động của bạn (tốt nhất là tại onCreateOptionsMothy), hãy sử dụng lệnh setgroupVisible để đặt tất cả các mục menu hiển thị thành sai hoặc đúng.

public boolean onCreateOptionsMenu(Menu menu) {
   menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}

Nếu bạn muốn sử dụng lệnh này ở bất kỳ nơi nào khác trong hoạt động của mình, hãy nhớ lưu lớp menu thành cục bộ và luôn kiểm tra xem menu có rỗng không, bởi vì bạn có thể thực thi trước khi tạoOptionsMothy:

Menu menu;

public boolean onCreateOptionsMenu(Menu menu) {
       this.menu = menu;

}

public void hideMenus() {
       if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible       
}


1

Tôi nghĩ rằng một cách tiếp cận tốt hơn sẽ là sử dụng một biến thành viên cho menu, khởi tạo nó trong onCreateOptionsMothy () và chỉ sử dụng setVisible () sau đó, mà không làm mất hiệu lực menu tùy chọn.


1

mã này làm việc cho tôi

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu,menu);
    if (Application.sharedPreferences.getInt("type",1) == 2)
    {
        menuItem = menu.findItem(R.id.menu_travel_orders);
        menuItem.setVisible(false);
    }
    return super.onCreateOptionsMenu(menu);
}

1

Cách tiếp cận này làm việc cho tôi:

private  Menu thismenu;

if (condition)
{
   if(thismenu != null)
   {
       thismenu.findItem(R.id.menu_save).setVisible(true);
       Toast.makeText(ProfileActivity.this, 
    ""+thismenu.findItem(R.id.menu_save).getTitle(),
                Toast.LENGTH_SHORT).show();
   }else
   {
       thismenu.findItem(R.id.menu_save).setVisible(false);
   }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.profile_menu, menu);
   thismenu = menu;

   return true;
}

1

Bạn đang cố gắng truy cập một mục menu từ một hoạt động, không có quyền truy cập vào phạm vi. Cuộc gọi để tìm mục menu sẽ trả về null , vì chế độ xem không bị ràng buộc với cả hoạt động và bố cục mà bạn đang gọi.

Các mục menu được liên kết với các mục như " Thanh điều hướng " lần lượt được liên kết với hoạt động tương ứng.

Vì vậy, khởi tạo các chế độ xem đó trong hoạt động (), sau đó truy cập vào các mục menu cùng với các chế độ xem đó.

Navigation navView;
navView = findViewById(R.id.navigationView);

MenuItem item = navView.getMenu().findItem(R.id.item_hosting);
item.setVisible(false);

1

sử dụng invalidateOptionsMenu()

để gọi onPrepareOptionsMenu(menu: Menu?)

bạn chỉ nên sử dụng onCreateOptionsMothy () để tạo trạng thái menu ban đầu và không thực hiện thay đổi trong vòng đời hoạt động ...

Khi một sự kiện xảy ra và bạn muốn thực hiện cập nhật menu, bạn phải gọi không hợp lệOptionsMothy () để yêu cầu hệ thống gọi onPrepareOptionsMothy ().

https://developer.android.com/guide/topics/ui/menus


0

Android kotlin, ẩn hoặc đặt mức độ hiển thị của một mục menu trong thanh hành động theo lập trình.

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    val inflater = menuInflater
    inflater.inflate(R.menu.main_menu, menu)
    val method = menu.findItem(R.id.menu_method)
    method.isVisible = false //if want to show set true
    return super.onCreateOptionsMenu(menu)
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.