首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在片段上更改屏幕方向之前,无法摆脱ActionBar中的自定义视图

在片段上更改屏幕方向之前,无法摆脱ActionBar中的自定义视图
EN

Stack Overflow用户
提问于 2013-05-24 13:54:33
回答 3查看 2.9K关注 0票数 4

我正在使用安卓的原生ActionBar (而不是夏洛克)作为一个项目。我有一个FragmentActivity和三个片段:其中两个是ListFragments,另一个是一个片段。

在我最初的“主页”片段中,我在我的应用程序的ActionBar中设置了一个自定义视图(一个旋转器),并在我的主页片段的onActivityCreated()中设置了这个视图:

代码语言:javascript
复制
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()中:

代码语言:javascript
复制
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(false);
setHasOptionsMenu(true);

主页片段中的所有内容都运行得很好。一点问题都没有。当我切换到我的下一个片段时,我使用它试图摆脱自定义视图(spinner),并在onStart()中显示up按钮、home和我的应用程序的标题:

代码语言:javascript
复制
getActivity().getActionBar().setDisplayShowCustomEnabled(false);
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
setHasOptionsMenu(true);

当我开始看这个片段的时候,它显示了主页,向上按钮,但没有显示标题。然后,当我进入应用程序的最后一个片段,同样的结果。但是当我在这些片段上旋转手机的时候,它就像我希望的那样显示了标题。我知道这是因为活动正在被重新创建,所以当我旋转手机时,actionbar的自定义视图被擦除。我已经在运行getActionBar().getCustomView()的测试中确认了这一点,并在它为null和not时进行了检查。

备注:

  • 我的主页片段在setRetainInstance(真)中有onCreate(真)。
  • 我尝试过: getActionBar().setCustomView(null);没有运气
  • (试过了getActionBar().setDisplayShowCustomEnabled(false);,setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);,setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE、ActionBar.DISPLAY_SHOW_CUSTOM、ActionBar.DISPLAY_SHOW_CUSTOM);都有相同的效果
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-26 02:10:18

在做了更多的测试和观察了Android在不同的ActionBar场景下的行为之后,我找到了一个可行的解决方案。有点讨厌,但这是我找到的唯一可行的方法。实际上与定制视图无关..。

Android似乎将ActionBar建立在创建活动时设置的片段上。让我用一个例子来解释:假设我们有一个活动和两个片段。片段"A“设置了以下选项:

代码语言:javascript
复制
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);

片段"B“设置了以下选项:

代码语言:javascript
复制
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);

当应用程序第一次启动,片段A出现时,没有标题。这很好,因为我没有包含片段A的ActionBar.DISPLAY_SHOW_TITLE。当我转到片段B时,它也没有显示标题。这就是整个问题所在。片段B说要显示标题,但它不是。

但如果你旋转手机时,碎片B是集中,标题出现。回到片段A,然后回到片段B,标题仍然出现。奇怪..。

如果你旋转手机时,碎片B是集中,标题显示。回到片段A,然后回到片段B,标题仍然出现。所以一切都很好,回到片段A,旋转手机,我们回到原来的问题,就像应用程序第一次启动一样。因此,似乎遵循了在创建活动时将焦点放在ActionBar上的“规则”。

这是我的解决方案。就像我想的那样:

在A段:

代码语言:javascript
复制
getActivity().getActionBar().setTitle("");
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_TITLE);

然后在B段中:

代码语言:javascript
复制
getActivity().getActionBar().setTitle(R.string.app_name);
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
票数 2
EN

Stack Overflow用户

发布于 2013-05-24 14:53:26

你试过getActionBar().getCustomView().setVisibility(View.GONE);了吗?此时自定义视图为null,现在将其设置为null。:)

您的自定义视图将不可见,也不能接收触摸事件。

票数 1
EN

Stack Overflow用户

发布于 2014-09-15 07:08:21

您可以通过以下方式获得标题和主页图标

代码语言:javascript
复制
getActivity().getActionBar().setTitle("Title");
getActivity().getActionBar().setDisplayShowHomeEnabled(true);
getActivity().getActionBar().setDisplayShowTitleEnabled(true);
getActivity().getActionBar().setDisplayShowCustomEnabled(false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16736686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档