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 ...
随机推荐
- 节流throttle和防抖debounce
underscore.js提供了很多很有用的函数,今天想说说其中的两个.这两个函数都用于限制函数的执行. debounce 在解释这个函数前,我们先从一个例子看下这个函数的使用场景.假设我们网站有个搜 ...
- 言简意赅的TIME_WAIT
为什么要有TIME_WAIT? 主动关闭端发送完ACK后等2MSL(最长分节生命期),防止对端没有收到ACK这种情况,重发. 官方点,再官方点...... (1) 可靠地实现TCP全双工连接的终止: ...
- linux内核裁剪及编译可加载模块
一:linux内核裁剪: 1:编译内核源码: 今天的重点内容是内核驱动的编写,在编写驱动之前首先的了解linux内核源码,linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进 ...
- Mysql:查询每个月下的数据,根据状态或者年份的sql语句
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本次的MySQL开篇记录了一道面试题,我给其扩展一下 这面试题它难点在什么地方,不外乎是操作月份和将其展示的 ...
- C语言实现计算双基回文数详解
双基回文数的定义: 如果一个正整数n至少在两个不同的进位制(二进制<=进制=<十进制)b1和b2下都是回文数,则称n是双基回文数. 根据定义,简单的说就是在二进制到十进制之间(包括十进制和 ...
- thinter中button按钮控件(三)
button控件 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry(" ...
- VM10虚拟机安装图解
支持32位windows操作系统和64位操作系统的VM10虚拟机 ============= 下载虚拟机: VM10虚拟机下载网址+Vm10的激活秘钥 https://jingyan.baidu.c ...
- 转载:python + requests实现的接口自动化框架详细教程
转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...
- segmenter_worker.go
package; ; i < engine.initOptions.NumShards; i++ { if i == shard { ...
- 【NOIP模拟赛】随
题目链接: 172.18.111.252:800/problem.php?cid=1001&pid=0 题解: 膜达神……(NOIP考这个就等爆零吧……) 显然我们得到一个结论:$ans=\s ...