【问题标题】:Hide or remove static menu item in Android在 Android 中隐藏或删除静态菜单项
【发布时间】:2018-01-08 00:53:23
【问题描述】:

我有一个静态底部导航菜单。我需要隐藏一些菜单项。我进行了调查,但无法正常工作。

请帮忙。

navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menuMain" >

    <item
        android:id="@+id/navigation_menu"
        android:icon="@drawable/ic_menu_black_24dp"
        android:title="@string/title_menu" />

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_explore_black_24dp"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_map_black_24dp"
        android:title="@string/title_dashboard" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_settings_black_24dp"
        android:title="@string/title_notifications" />

</menu>

MainActivity

public class MainActivity extends AppCompatActivity {

    MenuItem navigationHome;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.navigation, menu);
        // Get dynamic menu item
        navigationHome = menu.findItem(R.id.navigation_home);
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);

        // It does not work
        navigationHome.setVisible(false);
        menu.removeItem(R.id.navigation_home);

        return true;
    }
   ...
}

我的意思是我已经完全实现了这种方法 https://segunfamisa.com/posts/bottom-navigation-view-android 并且事件无法使用项目属性 android:visible="false" 隐藏项目。太奇怪了……

【问题讨论】:

  • 需要调用invalidateOptionsMenu()触发onPrepareOptionsMenu()
  • @Henry 嗨!请分享你的答案。我确实在onResume 上使用过这种方法,但它不起作用。

标签: java android menuitem android-menu


【解决方案1】:

如果您在onResume() 中调用invalidateOptionsMenu(),那么它将触发onPrepareOptionsMenu()。所以这不是你的问题。

您的问题在navigationHome.setVisible(false); 行。试试这个:menu.findItem(R.id.navigation_home).setVisible(false);

另外,你不需要menu.removeItem(R.id.navigation_home); 来隐藏。你可以摆脱它。

onPrepareOptionsMenu()应该是这样的:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.navigation_home).setVisible(false);
    return true;
}

【讨论】:

  • 对不起,兄弟。它不是。它仍然完全可见。它通过断点没有任何错误。
【解决方案2】:

将代码放在要隐藏/显示菜单项的位置。

menu.findItem(R.id.navigation_home).setVisible(false/*true*/);
invalidateOptionsMenu();

【讨论】:

    【解决方案3】:
     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
    
            getMenuInflater().inflate(R.menu.menu, menu);
            return true;`enter code here`
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            Log.d("sadsad","ds");
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    item.setVisible(false);
                    Toast.makeText(getApplicationContext(),
                            "Setting...",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
            return false;
        }
    

    【讨论】:

    • 嘿...您的代码无助于隐藏静态 'android:id="@+id/navigation_home"' 即使我喜欢` ` 它仍然可见。 wtf ...为什么在菜单中隐藏项目如此困难???它应该像 2 x 2 一样简单
    【解决方案4】:

    我在这里找到了解决方案

    How to dynamically hide a menu item in BottomNavigationView?

       @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
          BottomNavigationView navigation = findViewById(R.id.navigation);
         navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    
    // This is a way to hide static menu item
          navigation.getMenu().removeItem(R.id.navigation_home);
          ...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2011-03-23
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多