Java 隐藏操作栏图标

Java 隐藏操作栏图标,java,android,android-fragments,Java,Android,Android Fragments,当我的抽屉显示时,我试图隐藏图标。这只是隐藏设置,而不是我想要的图标 在我的MainActivity中,我看到如果我添加此代码,图标会隐藏,但如果我按下其他片段显示它会崩溃 @Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawe

当我的抽屉显示时,我试图隐藏图标。这只是隐藏设置,而不是我想要的图标

在我的MainActivity中,我看到如果我添加此代码,图标会隐藏,但如果我按下其他片段显示它会崩溃

    @Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    menu.findItem(R.id.ofertasRefresh).setVisible(!drawerOpen); <--- I want to hide this icon
    return super.onPrepareOptionsMenu(menu);
}
有什么方法可以轻松地做吗? 顺便说一句,在我的片段1中,我添加了一个
onCreateOptions菜单
,以显示图像,效果非常好

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.refresh_menu, menu);
}
R.menu.refresh\u menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/ofertasRefresh"
    android:icon="@drawable/ic_action_refresh"
    android:title="Refresh"
    android:alphabeticShortcut="r"
    android:orderInCategory="200"
    android:showAsAction="ifRoom" />
</menu>


干杯。

我认为最好为每个片段和活动提供一个菜单XML。这意味着您不必隐藏/显示某些项目。同样关于回调():

当 菜单项被选中

注意:虽然您的片段接收到一个关于选定项的回调 它添加的每个菜单项都是活动首先接收 用户选择菜单项时的相应回调。如果 活动对所选回调项的实现不正确 处理所选项目,然后将事件传递给片段的 回拨。对于选项菜单和上下文菜单,这是正确的


我认为最好为每个片段和活动提供一个菜单XML。这意味着您不必隐藏/显示某些项目。同样关于回调():

当 菜单项被选中

注意:虽然您的片段接收到一个关于选定项的回调 它添加的每个菜单项都是活动首先接收 用户选择菜单项时的相应回调。如果 活动对所选回调项的实现不正确 处理所选项目,然后将事件传递给片段的 回拨。对于选项菜单和上下文菜单,这是正确的


我认为最好为每个片段和活动提供一个菜单XML。这意味着您不必隐藏/显示某些项目。同样关于回调():

当 菜单项被选中

注意:虽然您的片段接收到一个关于选定项的回调 它添加的每个菜单项都是活动首先接收 用户选择菜单项时的相应回调。如果 活动对所选回调项的实现不正确 处理所选项目,然后将事件传递给片段的 回拨。对于选项菜单和上下文菜单,这是正确的


我认为最好为每个片段和活动提供一个菜单XML。这意味着您不必隐藏/显示某些项目。同样关于回调():

当 菜单项被选中

注意:虽然您的片段接收到一个关于选定项的回调 它添加的每个菜单项都是活动首先接收 用户选择菜单项时的相应回调。如果 活动对所选回调项的实现不正确 处理所选项目,然后将事件传递给片段的 回拨。对于选项菜单和上下文菜单,这是正确的


在我看来,最好的方法是重写
onDrawerClosed()
/
onDrawerOpened()
ActionBarDrawerToggle
中的方法。请看这里:

public boolean mDrawerOpened;

    ActionBarDrawerToggle abdt = new ActionBarDrawerToggle( ... ) {

        public void onDrawerClosed(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = false;
            invalidateOptionsMenu();
            syncState();
        }

        public void onDrawerOpened(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = true;
            invalidateOptionsMenu();
            syncState();
        }
invalidateOptionsMenu()
在主机活动中启动对
onPrepareOptionsMenu()
方法的调用。然后:

public boolean onPrepareOptionsMenu(Menu menu) {
    if (mDrawerOpened) { menu.removeItem(R.id.ofertasRefresh); }
    if (!mDrawerOpened) { menu.add(Menu.NONE, R.id.ofertasRefresh, Menu.NONE, R.string.title); }
    return super.onPrepareOptionsMenu(menu);
}
使用可见性(可能效果更好):


在我看来,最好的方法是重写
onDrawerClosed()
/
onDrawerOpened()
ActionBarDrawerToggle
中的方法。请看这里:

public boolean mDrawerOpened;

    ActionBarDrawerToggle abdt = new ActionBarDrawerToggle( ... ) {

        public void onDrawerClosed(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = false;
            invalidateOptionsMenu();
            syncState();
        }

        public void onDrawerOpened(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = true;
            invalidateOptionsMenu();
            syncState();
        }
invalidateOptionsMenu()
在主机活动中启动对
onPrepareOptionsMenu()
方法的调用。然后:

public boolean onPrepareOptionsMenu(Menu menu) {
    if (mDrawerOpened) { menu.removeItem(R.id.ofertasRefresh); }
    if (!mDrawerOpened) { menu.add(Menu.NONE, R.id.ofertasRefresh, Menu.NONE, R.string.title); }
    return super.onPrepareOptionsMenu(menu);
}
使用可见性(可能效果更好):


在我看来,最好的方法是重写
onDrawerClosed()
/
onDrawerOpened()
ActionBarDrawerToggle
中的方法。请看这里:

public boolean mDrawerOpened;

    ActionBarDrawerToggle abdt = new ActionBarDrawerToggle( ... ) {

        public void onDrawerClosed(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = false;
            invalidateOptionsMenu();
            syncState();
        }

        public void onDrawerOpened(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = true;
            invalidateOptionsMenu();
            syncState();
        }
invalidateOptionsMenu()
在主机活动中启动对
onPrepareOptionsMenu()
方法的调用。然后:

public boolean onPrepareOptionsMenu(Menu menu) {
    if (mDrawerOpened) { menu.removeItem(R.id.ofertasRefresh); }
    if (!mDrawerOpened) { menu.add(Menu.NONE, R.id.ofertasRefresh, Menu.NONE, R.string.title); }
    return super.onPrepareOptionsMenu(menu);
}
使用可见性(可能效果更好):


在我看来,最好的方法是重写
onDrawerClosed()
/
onDrawerOpened()
ActionBarDrawerToggle
中的方法。请看这里:

public boolean mDrawerOpened;

    ActionBarDrawerToggle abdt = new ActionBarDrawerToggle( ... ) {

        public void onDrawerClosed(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = false;
            invalidateOptionsMenu();
            syncState();
        }

        public void onDrawerOpened(View v) {
            super.onDrawerClosed(v);
            mDrawerOpened = true;
            invalidateOptionsMenu();
            syncState();
        }
invalidateOptionsMenu()
在主机活动中启动对
onPrepareOptionsMenu()
方法的调用。然后:

public boolean onPrepareOptionsMenu(Menu menu) {
    if (mDrawerOpened) { menu.removeItem(R.id.ofertasRefresh); }
    if (!mDrawerOpened) { menu.add(Menu.NONE, R.id.ofertasRefresh, Menu.NONE, R.string.title); }
    return super.onPrepareOptionsMenu(menu);
}
使用可见性(可能效果更好):



当我单击
MainActivity.java:170
时,空点是
menu.findItem(R.id.ofertasRefresh).setVisible(!drawerropen)我猜这是空的…你在使用ActionBarDrawerToggle吗?你能包括你的
R.menu.refresh\u menu
XML吗?@ianhanniballake包括在内。当我点击
MainActivity.java:170
时,空点是
menu.findItem(R.id.ofertasRefresh).setVisible(!drawerropen)我猜这是空的…你在使用ActionBarDrawerToggle吗?你能包括你的
R.menu.refresh\u menu
XML吗?@ianhanniballake包括在内。当我点击
MainActivity.java:170
时,空点是
menu.findItem(R.id.ofertasRefresh).setVisible(!drawerropen)我猜这是空的…你在使用ActionBarDrawerToggle吗?你能包括你的
R.menu.refresh\u menu
XML吗?@ianhanniballake包括在内。当我点击
MainActivity.java:170
时,空点是
menu.findItem(R.id.ofertasRefresh).setVisible(!drawerropen)我猜这是空的…你在使用ActionBarDrawerToggle吗?你能包括你的
R.menu.refresh\u menu
XML吗?@ianhanniballake包括在内。或者如果你愿意,只使用可见性。让我看看我是否做对了。。。公共布尔值…
我必须放在哪里?在MainActivity.java或o上