从 OnClickListener 打开菜单

open a menu from OnClickListener

我想从 OnClickListener 打开菜单 不使用 onCreateOptionsMenu

方法 我的代码:

    toolbar.setNavigationIcon(R.drawable.week);  //your icon
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v ) {

        }
    });

提前致谢!

我认为您想 show/hide 一个基于用户操作的菜单项。为此,您必须使用 onCreateOptionsMenu,并且每当您想要 show/hide 菜单项时,然后调用 invalidateOptionsMenu(此方法将再次调用 onCreateOptionsMenu)。

boolean mShowMenu = false;

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.your_menu, menu);
    MenuItem item = menu.findItem(R.id.your_menu_item);
    item.setVisible(showMenu);
    return true;
}

并且在您的代码中,当您想要显示菜单项时。

 toolbar.setNavigationIcon(R.drawable.week);  //your icon
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v ) {
            mShowMenu = true;
            invalidateOptionsMenu();
        }
    });

并尝试一下。

您应该需要在 xml 文件中创建菜单界面,像这样

 <item
    android:id="@+id/settings"
    android:title="Setting"
    app:showAsAction="never" />
<item
    android:id="@+id/my_activity"
    android:title="My Activity"
    app:showAsAction="always"
    android:icon="@android:drawable/btn_radio"/>

之后,在特定 class 的 Java 代码中,您需要像这样创建代码;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

  if (id == R.id.my_activity) {
        Intent intent1 = new Intent(this,MyActivity.class);
        this.startActivity(intent1);
        return true;
    }

    if (id == R.id.settings) {
        Toast.makeText(this, "Setting", Toast.LENGTH_LONG).show();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

希望这可以解决您的问题