从片段内部访问 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() 方法...显然我不知道自己在做什么。
谨记:
- My Main Activity extends AppCompatActivity(我认为这是 Navigation Drawer 工作所必需的)
- 我的主 activity 的主题是 "AppTheme.NoActionBar"(这是在开始的默认代码中提供的,但对我来说没有任何意义,因为顶部显然有一个栏屏幕,它是导航抽屉的一部分)
My Main Activity 导入以下内容:
导入 android.app.Fragment;
导入 android.app.Fragment 经理;
导入 android.app.Fragment交易;
导入 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.AppCompatActivity;
导入 android.support.v7.widget.Toolbar;
导入 android.view.Menu;
导入 android.view.Menu 项;
导入 com.android.volley.RequestQueue;
build.gradle 包含:
依赖关系{
编译文件树(目录:'libs',包括:['*.jar'])
测试编译 '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) 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();
在开发应用程序并学习了大量有关 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() 方法...显然我不知道自己在做什么。
谨记:
- My Main Activity extends AppCompatActivity(我认为这是 Navigation Drawer 工作所必需的)
- 我的主 activity 的主题是 "AppTheme.NoActionBar"(这是在开始的默认代码中提供的,但对我来说没有任何意义,因为顶部显然有一个栏屏幕,它是导航抽屉的一部分)
My Main Activity 导入以下内容: 导入 android.app.Fragment; 导入 android.app.Fragment 经理; 导入 android.app.Fragment交易; 导入 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.AppCompatActivity; 导入 android.support.v7.widget.Toolbar; 导入 android.view.Menu; 导入 android.view.Menu 项; 导入 com.android.volley.RequestQueue;
build.gradle 包含: 依赖关系{ 编译文件树(目录:'libs',包括:['*.jar']) 测试编译 '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) 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();