使用片段时更改ActionBar

在一个活动中调用的Fragment中,我正在显示如下这样的总线行:

第1页,当第一次开放。

然后,一旦用户点击“电台”,我喜欢显示电台列表。 我正在使用这个代码:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_long_distance); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.f_long_distance, new LongDistanceFragment()).commit(); } @SuppressWarnings({"UnusedDeclaration"}) public void showStationList(View view) { String tag = (String) view.getTag(); if (tag != null && tag.length() > 0) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); StationListFragment fragment = new StationListFragment(tag.split(",")); ft.add(R.id.f_long_distance, fragment); // ft.replace(R.id.f_long_distance, fragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.addToBackStack(null); ft.commit(); } } 

这个活动的XML是:

 <LinearLayout android:id="@+id/ll_container" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/f_long_distance" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

StationListFragment是一个简单的ListFragment,显示在另一个之上:

点击电台列表按钮后

虽然ActionBar运行良好,但它现在只包含标题。

如果我现在按回来,什么都行不通。 电台列表隐藏,但旧的ActionBar不会恢复:

从List按钮返回后的ActionBar

该文档说,添加ActionBar的方式是使用onCreateOptionsMenu方法等

所以,在LongDistanceFragment(第一个显示)中,我创build了这样的栏:

 @Override public void onViewCreated(View view, Bundle savedInstanceState) { Log.d(TAG, "onViewCreated"); super.onViewCreated(view, savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); ActionBar bar = getSupportActivity().getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); bar.setListNavigationCallbacks(new SimpleSpinnerArrayAdapter(getActivity()), this); } 

但是不知怎的,一旦用户回到这个片段中,它就不会被恢复。

我认为在回滚Fragment Transaction时需要恢复ActionBar的状态。

我错过了什么? 谢谢你的帮助。

Solutions Collecting From Web of "使用片段时更改ActionBar"

如果我正确理解你的代码,问题可能在你的StationListFragment

ActionBar与Activity本身相关联,而不是其中的一个特定的片段。

我猜测,在StationListFragment内,你正在修改ActionBar来显示“站”标题,并禁用列表导航模式。 在这种情况下,按下后退button将取消事务 – 有效地删除StationListFragment – 但不会自动撤消对Activity的操作栏所做的任何更改。

你需要做的就是覆盖你的Station List Fragment中的一个状态改变处理程序,以撤销/隐藏ActionBar的改变。

更好的方法是使用replace事务来将LongDistanceFragmentStationListFragment交换(而不是将前者添加到后者)。然后,您可以添加代码来将Action Barconfiguration到每个片段,以便它们适当地进行设置当它们变得可见时(通过重写onResume ),而不是在删除之后清理。

我正在处理同样的问题,当我在第二个片段的onStop方法恢复对ActionBar的更改时,它工作正常。