从片段

时间:2016-03-04 03:52:48

标签: android null android-actionbar fragment spinner

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

我还阅读了this page

如果我只是使用正常的活动,我就不会有问题,但我会感到非常困惑,并且我想知道是否有人可以提供帮助。

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

当我决定将3个非常相似的listfragments合并为一个时,我的问题开始了。当我从导航抽屉中选择此listFragment时,我会通过使用单个listFragment并使用Spinner替换导航抽屉(主)活动的应用栏/工具栏/操作栏上的标题来执行此操作。加载到主视图中。

微调器的目的是过滤listview(listFragment)元素。列表是人员列表,Spinner选项类似于"排序方式:" [最近联系,收藏,最近](这些是最初的三个单独的listFragments)。

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

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

所以我试图让这个解决方案适应我的问题...唯一的区别是我使用了Fragments并尝试从我的Fragment中访问getActionBar()(?)。

从片段里面,我把:

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

我得到一个警告,它可能会返回null并且确实如此。

我也尝试过:

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

具有相同的结果。

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

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

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

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

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

请记住:

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

  • build.gradle包含: 依赖{ 编译fileTree(dir:' libs',include:[' * .jar']) testCompile' junit:junit:4.12' 编译' com.android.support:appcompat-v7:23.1.1' 编译' com.android.support:设计:23.1.1' 编译' com.android.volley:volley:1.0.0' 编译' org.immutables:gson:2.1.8' }

我的基本问题是:

1)我需要从片段中访问哪类对象(App栏,操作栏,工具栏,?)?

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

感谢您的耐心等待!

更新:

自发布以来,我了解到:

工具栏和ActionBar不是一回事。我正在使用一个使用"材料设计的导航抽屉。"我的主要活动扩展了AppCompatActivity并使用工具栏,而不是ActionBar。

从我的片段中,我可以使用:

访问工具栏对象
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

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

UPDATE !!!

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

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

1 个答案:

答案 0 :(得分:3)

如果您正在使用AppCompatActivity,请执行此操作。

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

或者,如果您正在使用ActionBarActivity,请尝试此操作。

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