我正在为一个项目使用 Android 的原生 ActionBar(不是 sherlock)。我有 1 个 FragmentActivity 和 3 个片段:其中 2 个是 ListFragment,另一个是 Fragment。
在我最初的“主页”片段中,我在我的应用程序的 ActionBar 中设置了一个自定义视图(微调器),并在我的主页片段的 onActivityCreated() 中设置了这个:
ActionBar actionBar = getActivity().getActionBar();
actionBar.setCustomView(R.layout.homepage_spinner);
Spinner spinner = (Spinner) actionBar.getCustomView().findViewById(R.id.homepage_selection_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.homepage_selection_spinner_text,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(mSpinnerListener.getCurrentPosition());
spinner.setOnItemSelectedListener(mSpinnerListener);
然后在 onStart() 中:
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(false);
setHasOptionsMenu(true);
主页片段中的所有内容都运行良好。完全没有问题。当我切换到下一个片段时,我使用它来尝试摆脱自定义视图(微调器)并在 onStart() 中显示我的应用程序的向上按钮、主页和标题:
getActivity().getActionBar().setDisplayShowCustomEnabled(false);
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
setHasOptionsMenu(true);
当我最初转到此片段时,它显示主页、向上按钮,但不显示标题。然后,当我转到应用程序的最后一个片段时,结果完全相同。但是当我在这些片段上旋转手机时,它会像我希望的那样显示标题。我知道发生这种情况是因为正在重新创建活动,因此当我旋转手机时操作栏的自定义视图被删除。我已经通过运行 getActionBar().getCustomView(); 的测试确认了这一点。并检查它何时为空而不是。
注意:
- 我的主页片段在 onCreate() 中有 setRetainInstance(true)。
- 我试过:getActionBar().setCustomView(null); 没有运气
- 试过 getActionBar().setDisplayShowCustomEnabled(false);, setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);, setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); 都具有相同的效果