Fragment和Activity交互之actionbar
来源:互联网 发布:网线摄像头软件 编辑:程序博客网 时间:2024/06/06 09:28
通常fragment和activity之间的交互一般是通过在Fragment中定义回调函数来实现
今天说说google已经定义好了回调接口的actionBar交互
看图:
上面的actionbar是运行是activity的布局,中间的图片部分是一个FragmentLayout布局
但是我想点击“TIMELINE”希望能控制FragmentLayout中显示的Fragment中的某些数据或布局。
而且通过以下方法可以实现不同的fragment在activity中显示,可以显示不用的actionbar,且能自动响应各个fragment自己的事件,适合多tab包含多个fragment功能布局
实现方法:
先看Fragment中的code及说明
第一步,setHasOptionsMenu(true);
@Override public void onCreate(Bundle savedInstanceState) { MyLog.d(TAG, "timeline onCreate"); //设置fragment可以响应actionbar事件和添加本fragment专有的item进去, //其在activity中的点击会回调到fragment //然后重写onCreateOptionMenu()和onOptionsItemSelected() //onCreateOptionMenu添加的item会叠加到activity上去,onOptionsItemSelected可以响应非自己专有的的item事件 setHasOptionsMenu(true); super.onCreate(savedInstanceState); }
第二部,这里和activity中设置actionbar是很相似的,布局你的actionbar,唯一的不同是函数的返回值
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.add(0, 1, 0, "Timeline").setShowAsAction( MenuItem.SHOW_AS_ACTION_IF_ROOM); }
当然你也可以通过xml文件的方式布局你的actionbar,像这样(用上方的下面两段代码片可忽略)
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.singleview_actionbar, menu); return true; }
xml很简单如:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/singleview_delete" android:icon="@drawable/delete" android:orderInCategory="100" android:showAsAction="always" android:title="delete"/> <item android:id="@+id/singleview_send" android:icon="@drawable/send" android:orderInCategory="101" android:showAsAction="always" android:title="send"/> <item android:id="@+id/singleview_liked" android:icon="@drawable/star" android:orderInCategory="102" android:showAsAction="always" android:title="liked"/></menu>
第三步,编写item的响应事件
这里不用你担心回调的问题,会自动响应你这里实现的itme点击事件,不管是不是此fragment自己布局的item,还可以响应activity中的item
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 0://这个0是上图中“操作”字样的ItmeId //这里可以回调activity全部item的事件 Toast.makeText(getActivity(), "点击了在timeline fragment定义的点击事件", Toast.LENGTH_SHORT).show(); break; case ITEM_ID: if (mActionMode != null) { return false; } mActionMode = getActivity().startActionMode(this); // 现在是多选 mMultipleSeleteTag = true; break; default: break; } return super.onOptionsItemSelected(item); }
0 0
- Fragment和Activity交互之actionbar
- Activity和Fragment交互
- Fragment和Activity交互
- Activity和Fragment交互
- Fragment和Activity的交互
- Fragment和Activity的交互
- Fragment和Activity的交互
- Fragment和Activity的交互
- Activity和Fragment的交互
- Fragment和Activity的交互
- Activity 和 Fragment 的交互
- Fragment和Activity的交互
- Fragment和Activity的交互
- Fragment和Activity交互,Fragment回调
- Android Fragment和Activity的交互介绍
- 通过 回调让Activity和Fragment及时交互
- Fragment和Activity之间的交互
- Fragment和Activity之间的交互
- 手机尾号评分
- jQuery Mobile学习笔记(八)——安装及离线
- 绝对值排序 HDU 2020
- 5B Center Alignment(字符串处理)
- Android初学需要了解的一些概念
- Fragment和Activity交互之actionbar
- 使用java代码构建android布局控件
- ALICTF2015 writeup(二)(第三排)
- IT运维服务是一个什么样子的情况?
- tomcat
- 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
- WebBrowser如何控制Frame下面的元素
- OC js 交互
- VMware一些坑