android Fragment中使用Toolbar
在Activity中可以直接使用
setSupportActionBar(toolbar);
就可以重写 onCreateOptionsMenu 和 onOptionsItemSelected 方法;
但是在Fragment中则需要
((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
Fragment中需要将 getActivity()转为AppCompatActivity才能获取setSupportActionBar方法;
还有在Fragment中还需要添加一行
setHasOptionsMenu(true);
才能调用 onCreateOptionsMenu 和 onOptionsItemSelected 方法;
如果在 onCreateOptionsMenu 方法中存在判断比如当改变某个状态时某些菜单item不显示等,可以使用如下再重新调用 onCreateOptionsMenu 方法
getActivity().invalidateOptionsMenu();
例:
@Override
protected void initListener() {
((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
setHasOptionsMenu(true);
} @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_edit_select,menu);
if(showEditSelect){
menu.findItem(R.id.menu_edit).setVisible(true);
menu.findItem(R.id.menu_cancel).setVisible(false);
}else{
menu.findItem(R.id.menu_edit).setVisible(false);
menu.findItem(R.id.menu_cancel).setVisible(true);
}
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
//当点击一个条目时,不显示另外一个
case R.id.menu_edit:
showEditSelect = false;
getActivity().invalidateOptionsMenu();
break;
case R.id.menu_cancel:
showEditSelect = true;
getActivity().invalidateOptionsMenu();
break;
}
return true;
}
menu_edit_select.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_edit"
android:title="编辑"
android:orderInCategory="100"
app:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/menu_cancel"
android:title="取消"
android:orderInCategory="101"
android:visible="false"
app:showAsAction="ifRoom|withText"/>
</menu>
实现在标题栏菜单处点击“编辑”就会在原来位置上显示“取消”,点击“取消”显示“编辑”。
android Fragment中使用Toolbar的更多相关文章
- Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
Toolbar作为ActionBar使用介绍 本文介绍了在Android中将Toolbar作为ActionBar使用的方法. 并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为 ...
- Android Toolbar使用及Fragment中的Toolbar处理
Toolbar作为ActionBar使用介绍 本文介绍了在Android中将Toolbar作为ActionBar使用的方法.并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为A ...
- 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...
- Android Fragment中使用Intent组件拍照
要在activity里面去接受,然后传递给fragment对象,fragment有很多回调调用不到 你的设备有摄像头吗? 为了确保市场上的大多数设备都能运行你的程序,必须在项目中做一些检测,保证使用的 ...
- 关于在Fragment中设置toolbar及菜单的方法
在NoActionBar的主题中onCreateOptionsMenu方法不会运行,这里就需要将toolbar强制转换为ActionBar 在加入toolbar的监听之类后需要在onCreateVie ...
- Android Fragment中调用getActivity为null的问题
在使用fragment的时候经常会遇到getActivity()为null的情况.比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题.之前解决这个问题,通常都是直 ...
- Android --Fragment中异步HTTP请求
1.自定义异步Task /** * 异步获取实时数据 */ public class TimerDataTask extends AsyncTask<Void, Void, Boolean> ...
- Android——Fragment+Editext总结
原文地址: android Fragment中没有onTouchEvent解决方法 Android--点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失,android-- ...
- android开发中fragment获取context
在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...
随机推荐
- hessian在ssh项目中的配置
一. 在服务端发布一个web项目 1.创建一个动态的web项目,并导入hessian的jar包 2. 在服务端的crm项目中创建接口 package cn.rodge.crm.service;impo ...
- c语言常见的几种排序方法总结
一:选择排序和冒泡排序 这两种排序比较简单,直接贴出代码: #include <stdio.h> void choose_sort(int *arr, int n); void bubbl ...
- SSM-Spring-02:Spring的DI初步加俩个实例
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- DI:依赖注入 第一个DEMO:域属性注入 java类:(Car类和Stu类,学生有一辆小汽车) packag ...
- JAVA PERSISTENCE API (JPA)
13.2.1. About JPA The Java Persistence API (JPA) is the standard for using persistence in Java proje ...
- 你不知道的JavaScript--Item7 函数和(命名)函数表达式
1.函数声明与函数表达式 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier ...
- python实现简体中文和繁体相互转换
1. opencc-python 如果目录上的链接被屏蔽了,请手动复制 https://pypi.python.org/pypi/opencc-python/ 首先介绍opencc的python实现库 ...
- tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解
本文来源:http://blog.csdn.net/wanghui2008123/article/details/37694307 本文参考http://blog.sina.com.cn/s/blog ...
- vagrant命令
$ vagrant init # 初始化 $ vagrant up # 启动虚拟机$ vagrant halt # 关闭虚拟机$ vagrant reload ...
- pingo--util.go 源码阅读
:] } var _letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-&qu ...
- loj536 「LibreOJ Round #6」花札
一眼二分图博弈,于是我们可以拿到69分的好成绩. 二分图暴力加边的数目是O(n^2)的,于是我们考虑网络流优化建图,将alice的每个牌向其的颜色和编号节点连边,bob的每个牌由其颜色和编号节点向其连 ...