在 Fragment 中获取工具栏

Getting Toolbar in Fragment

我在主 activity 中设置了一个工具栏,当我进入一个片段时,我想在上面添加一个滑块。如果我可以访问工具栏 object,我会简单地做:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);


Spinner mNavigationSpinner = new SpinnerTrigger(getSupportActionBar().getThemedContext());
toolbar.addView(mNavigationSpinner);

但是如果我使用

((ActionBarActivity) getActivity()).getSupportActionBar()

我没有任何addView()方法。所以我的问题是,如果工具栏本身是在 Activity.

中创建的,我如何在片段中向工具栏添加视图

我不确定这是否是解决此问题的最佳视图,但我认为我无法在布局中定义 Spinner,因为我的大部分片段都不使用它,它们只需为工具栏设置一个标题。但与此同时,如果我可以在主 activity 中定义一次工具栏而不是为每个片段都重做,那就太好了。

您可以使用

获取它
Toolbar refTool = ((NameOfClass)getActivity()).toolbar;

或者,创建您的 MainActivity 实例,然后覆盖 onAttach(Activity activity) 并将您的 MainActivity 实例对象分配给 onAttach()

中的 activity

查看工具栏的主要目的是 https://developer.android.com/reference/android/widget/Toolbar.html 阅读此处,因此工具栏和操作栏没有任何区别。所以如果你想在设置为 Actionbar 之前将视图添加到工具栏,那么 toolbar.addView(your view); 就可以了,但是在应用到 setactionbar(toolbar)setSupportActionbar(toolbar) 之后你可以将视图设置为 actionbar.

例如。 ((ActionBarActivity) getActivity()).getSupportActionBar().setView(您的视图)

就是这样...

Ellitz answer 实现相同目的的另一种方法,在片段内直接访问工具栏(或 activity 内的任何其他视图):

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

我想对 Budius 所说的进行补充。

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

是正确的做法。因为

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

returns一个视图。这会给您带来错误,您应该将其转换为 Toolbar.