Android 方向更改后将显示ActionItem

Android 方向更改后将显示ActionItem,android,android-fragments,android-actionbar,Android,Android Fragments,Android Actionbar,我已经面临了相当奇怪的问题,我已经与之斗争了好几天。我有两个片段A和B 当A可见时,我有ActionItem可见。将片段A替换为B后,我隐藏了ActionItem,它们是onCreate()中数据的过滤器(也在onConfigurationChanged()中尝试过)。它确实隐藏了。但当方向更改为横向时,此ActionItem将在操作栏中恢复 原因是什么? 另一个有趣的事实是,ActionItem正在标准名为Looper的java类中恢复。它在那里“循环”几次,然后恢复ActionItem 现

我已经面临了相当奇怪的问题,我已经与之斗争了好几天。我有两个片段
A
B

A
可见时,我有
ActionItem
可见。将片段
A
替换为
B
后,我隐藏了
ActionItem
,它们是
onCreate()
中数据的过滤器(也在
onConfigurationChanged()
中尝试过)。它确实隐藏了。但当方向更改为横向时,此
ActionItem
将在操作栏中恢复

原因是什么?

另一个有趣的事实是,
ActionItem
正在标准名为
Looper
的java类中恢复。它在那里“循环”几次,然后恢复
ActionItem


现在是代码。这就是我在代表片段导航的活动中创建它的方式:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.global_filters, menu);
    this.menu = menu;
    invalidateOptionsMenu();
    return super.onCreateOptionsMenu(this.menu);
}
global_filters.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"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".NavigationActivity">

<item android:id="@+id/action_filters"
    android:title="Filters"
    android:icon="@drawable/ic_filter_white"
    android:orderInCategory="100"
    app:showAsAction="ifRoom" />
</menu>
弹出\u过滤器\u user.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/filter_purchased_user"
    android:title="Purchased"/>
<item
    android:id="@+id/filter_price_user"
    android:title="Price"/>
<item
    android:id="@+id/filter_author_user"
    android:title="Author"/>
<item
    android:id="@+id/filter_difficulty_user"
    android:title="Difficulty"/>
</menu>

请记住,当方向更改时,整个活动都会重新绘制(即,生命周期方法的连续回调)

此外,活动与它的主机(活动)密切相关


从我看到的情况来看,您似乎在片段的
B
onCreate()
方法中隐藏了片段
A
。尝试在片段的生命周期方法中添加
Log.d(Tag,String)
方法,以查看何时调用这些方法。

在片段onCreate方法集中

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
然后通过重写为每个片段分别创建选项菜单

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
}
现在,您不需要在活动中处理菜单项


希望这能对你有所帮助。

我已经自己解决了这个问题。问题是在修改了
actionBar
的元素后,我没有保存它的状态

我所需要做的就是编写
setRetainInstance(true)每次项目修改后


解决方案总是简单的…

您是否尝试过,在每个片段中分别使用选项菜单。@Ishrat如果您能为可能的解决方案编写代码示例,我将不胜感激。或者至少更准确地描述一下,请看看下面我想说的答案……我相信这会简化
ActionBar
管理,谢谢。将在我的项目中使用它。虽然问题出在其他方面。
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
}