Android 从内部片段访问工具栏/ActionBar对象

Android 从内部片段访问工具栏/ActionBar对象,android,null,android-actionbar,fragment,spinner,Android,Null,Android Actionbar,Fragment,Spinner,在开发了一款应用程序并学习了大量关于Java和Android的知识之后,我遇到了一个问题。我一直在谷歌上搜索(比如工具栏、应用程序栏、片段、空指针异常、actionbar、appcompatactivity、v7、v4支持库、theme=noactionbar等) 我也读书 如果我只是使用正常的活动,我不会有问题,但是我感到非常困惑,我想知道是否有人能帮我 最初,我在Android Studio 1.5.1中启动了一个带有样板导航抽屉活动的项目。该应用程序的主要目的是显示人员列表。这是通过lis

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

我也读书

如果我只是使用正常的活动,我不会有问题,但是我感到非常困惑,我想知道是否有人能帮我

最初,我在Android Studio 1.5.1中启动了一个带有样板导航抽屉活动的项目。该应用程序的主要目的是显示人员列表。这是通过listFragment完成的(因为应用程序还可以从导航抽屉中选择其他内容(片段))

我的问题开始于我决定将3个非常相似的列表片段合并为一个。我会使用一个listFragment,当从导航抽屉中选择此listFragment并加载到主视图中时,用微调器替换导航抽屉(主)活动的应用程序栏/工具栏/操作栏上的标题

微调器的用途是过滤listview(listFragment)元素。该列表是一个人员列表,微调器选项类似于“排序方式:”[最近联系,收藏夹,最近](这是最初的三个单独的列表片段)

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

所以我试着让这个解决方案适应我的问题。。。唯一的区别是,我使用的是片段,并试图从片段内部访问getActionBar()

从片段内部,我将:

ActionBar actionBar = getActivity()).getActionBar();
我得到一个警告,它可能返回null,它确实返回了null

我还尝试:

ActionBar actionBar = getActivity()).getSupportActionBar();
同样的结果

然后我了解到(并在主要活动中阅读)工具栏是ActionBar的新版本。。。我可以在我主要活动的样板代码中看到以下内容:

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
所以“啊哈!!”我把代码改成:

Toolbar toolbar = getActivity()).getT.......
但是没有提供这样的getToolbar()方法。。。显然我不知道我在做什么

请记住:

  • 我的主要活动扩展了AppCompatActivity(我认为这是导航抽屉工作所必需的)
  • 我的主要活动的主题是“AppTheme.NoActionBar”(这是在一开始的默认代码中提供的,但对我来说没有意义,因为屏幕顶部显然有一个条,它是导航抽屉的一部分)
  • 我的主要活动导入以下内容: 导入android.app.Fragment; 导入android.app.FragmentManager; 导入android.app.FragmentTransaction; 导入android.os.Bundle; 导入android.support.design.widget.FloatingActionButton; 导入android.support.design.widget.Snackbar; 导入android.util.Log; 导入android.view.view; 导入android.support.design.widget.NavigationView; 导入android.support.v4.view.GravityCompat; 导入android.support.v4.widget.DrawerLayout; 导入android.support.v7.app.ActionBarDrawerToggle; 导入android.support.v7.app.AppActivity; 导入android.support.v7.widget.Toolbar; 导入android.view.Menu; 导入android.view.MenuItem; 导入com.android.volley.RequestQueue

  • build.gradle包含: 依赖关系{ 编译文件树(目录:“libs”,包括:['*.jar']) testCompile'junit:junit:4.12' 编译'com.android.support:appcompat-v7:23.1.1' 编译'com.android.support:design:23.1.1' 编译'com.android.volley:volley:1.0.0' 编译'org.immutables:gson:2.1.8'}

我的基本问题是:

1) 我需要从片段中访问哪类对象(应用程序栏、操作栏、工具栏?)

2) 如何从片段内部访问该对象

谢谢你的耐心

更新: 自发布此消息以来,我了解到:

工具栏和操作栏不是一回事。我使用的导航抽屉使用“材质设计”。我的主要活动扩展了AppCompatActivity并使用工具栏,而不是ActionBar

从我的片段中,我可以使用以下方式访问工具栏对象:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
但是,我找不到任何教程解释如何从片段向工具栏添加微调器。他们只解释了如何使用Actionbar。(见我前面提到的)

更新!!! 通过仅访问工具栏对象,似乎不可能从片段内部创建/控制主活动工具栏中的微调器,因此Naresh和Sahil下面的解决方案是正确的。。。我必须使用getSupportActionBar()并使用(AppCompatActivity)或([TheActualNameofMyInactivity])如下方式强制转换它:

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

如果您使用的是AppCompativeActivity,请按如下方式操作

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
或者,如果您正在使用ActionBarActivity,请尝试以下方法

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

您能简单地告诉我吗?您的片段是否附加到活动中?请共享您的githubrepo@BooberBunz添加ActionBar而不是工具栏,因为您将拥有更多的控制,getSupportActionBar将返回ActionBar,而theme没有ActionBar,那么它将没有ActionBar,但您得到了我认为,因为您添加了ActionBar,所以您看到的是ActionBar在这里你可能会得到一些帮助:-