从片段内部访问 Toolbar/ActionBar object

Accessing Toolbar/ActionBar object from inside fragment

在开发应用程序并学习了大量有关 Java 和 Android 的知识之后,我 运行 遇到了问题。我一直在谷歌搜索(工具栏、应用栏、片段、空指针异常、actionbar、appcompatactivity、v7、v4 支持库、theme=noactionbar 等)。

我也看了this page

如果我只是使用普通的 Activity,我不会有问题,但我感到很困惑,我想知道是否有人可以提供帮助。

最初,我在 Android Studio 1.5.1 中使用样板导航抽屉 Activity 开始了一个项目。该应用程序的主要目的是显示人员列表。这是通过 listFragment 完成的(因为应用程序执行的其他操作(片段)可以从导航抽屉中选择)。

当我决定将 3 个非常相似的列表片段合并为一个时,我的问题就开始了。当从导航抽屉中选择此 listFragment 并将其加载到主视图。

微调器的目的是过滤列表视图 (listFragment) 元素。该列表是人员列表,微调器选项类似于 "Sort By:" [最近联系、收藏、最近](这些是最初的三个单独的 listFragments)。

所以...我能找到的最接近解决方案的是:

How to combine Navigation Drawer and Spinner [like in Google+ App]

所以我尝试根据我的问题调整此解决方案...唯一的区别是我正在使用 Fragment 并尝试从 Fragment 内部访问 getActionBar() (?)。

在片段中,我输入:

ActionBar actionBar = getActivity()).getActionBar();

我收到一条警告,它可能 return 为 null,但确实如此。

我也试过:

ActionBar actionBar = getActivity()).getSupportActionBar();

结果相同

然后我了解到(并在主 activity 中阅读)Toolbar 是 ActionBar 的新版本...我可以在主 activity 的样板代码中看到以下内容:

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

所以 "Ahaa!!" 我将代码更改为:

Toolbar toolbar = getActivity()).getT.......

但是没有提供这样的 getToolbar() 方法...显然我不知道自己在做什么。

谨记:

我的基本问题是:

1) class of object(应用栏、操作栏、工具栏,??)我需要从片段中访问什么?

2) 如何从片段内部访问 object?

感谢您的耐心等待!

更新:

自从发布这篇文章后,我了解到:

Toolbar 和 ActionBar 不是一回事。我正在使用导航抽屉,它使用 "Material Design." My Main Activity extends AppCompatActivity 并使用 Toolbar,而不是 ActionBar。

在我的片段中,我可以使用以下方法访问工具栏 object:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

但是,我找不到任何说明如何从片段向 TOOLBAR 添加微调器的教程。他们只解释了如何使用 Actionbar 来做到这一点。 (参见我之前引用的 this link

更新!!!

似乎无法通过 仅访问工具栏 object[=92 来从片段内部 create/control 主 activity 工具栏中的微调器=],所以下面 Naresh 和 Sahil 的解决方案是正确的...我必须使用 getSupportActionBar() 并使用 (AppCompatActivity) 或 ([TheActualNameOfMyMainActivity]) 像这样投射它:

ActionBar actionbar = ((AppCompatActivity)getActivity()).getSupportActionBar();

如果您使用的是 AppCompatActivity,那么请这样做。

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();

或者,如果您使用的是 ActionBarActivity,那么试试这个。

ActionBar actionBar = ((ActionBarActivity )getActivity()).getSupportActionBar();