Android Fragment用法之给Activity创建事件回调
在某些案例中,可能需要Fragment与Activity共享事件。在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法。当Activity通过接口接受回调时,它能在必要时与布局中的其他Fragment共享信息。
例如,如果一个音乐播放器的应用程序在一个Activity中有两个Fragment---一个用来显示歌曲列表(Fragment A),另一个用来显示歌曲信息(Fragment B),然后在列表项目被选中时Fragment A必须告诉Activity,以便它能告诉Fragment B显示对应的歌曲信息。在下面的例子中在Fragment A的内部声明了onMp3ChangedListener接口。
public static class FragmentA extends ListFragment {
...
//持有它的Activity必须实现这个回调方法
public interface onMp3ChangedListener{
public void onMp3Changed(int index);//index表示的是歌曲在列表中的序号
}
...
}
然后,持有这个Fragment的Activity要实现onMp3ChangedListener接口,并且要重写onMp3Changed()方法把来自Fragment A的事件通知给Fragment B。要确保持有Fragment的Activity实现这个接口, Fragment A 的onAttach()回调方法(当Fragment被添加到Activity时系统调用这个方法)通过类型转换onAttach()传入的Activity来实例化一个onMp3ChangedListener的实例。
public static class FragmentA extends ListFragment {
onMp3ChangedListener mListener;
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (onMp3ChangedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener"); }
...
}
如果这个Activity没有实现这个接口,那么Fragment会抛出ClassCastException异常。
如果成功,那么mListener成员就会拥有Activity实现的onMp3ChangedListener对象的引用,以便Fragment A能够通过onMp3ChangedListener接口定义的回调方法和Activity共享事件。例如,Fragment A继承了ListFragment,那么用户每次点击列表项时,系统都会调用Fragment中的onListItemClick()方法,然后调用onMp3Changed()方法和Activity共享事件:
public static class FragmentA extends ListFragment {
OnArticleSelectedListener mListener;
...
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
mListener.onMp3Changed(position);
}
...
}
传递给onListItemClick()的position参数是被点击项目的行ID,Activity(或其他的Fragment)使用这个ID从歌曲列表中获取对应的歌曲信息。
Android Fragment用法之给Activity创建事件回调的更多相关文章
- Android Fragment用法知识点的讲解
Android Fragment用法的讲解 碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示.Fragment的出现,如微信的额主界面包含多个Fragment,使得微信功能更加简洁明了 ...
- Android Fragment用法详解(2)--动态添加Fragment
在上一篇文章<Android Fragment用法详解(1)--静态使用Fragment>我们讲解了Fragment的最简单的用法.这次我们来说一说Fragment复杂一丢丢的用法.在代码 ...
- android Fragment 用法小结
Fragment 是android 3.0引入的新API,是作为Activity的子模块,必须嵌入Activity才能使用. Activity 与 Fragment的关系: 一.依附性: 1. Fra ...
- Android Fragment向另一个Activity传值
1.Fragment内: Intent intent=new Intent(getActivity(),ShowDataActivity.class); //参数1:Fragment所依存的Activ ...
- android Fragment用法
Fragment常用的三个类:android.app.Fragment 主要用于定义Fragmentandroid.app.FragmentManager 主要用于在Activity中操作Fragme ...
- Android Fragment用法详解(1)--静态使用Fragment
先说明一下,本例子是运行在Android Studio下面的.同样的代码复制粘贴到Eclipse运行却会报错.具体原因我也没有细查.知道的哥们,留言通知下呗. Fragment,也就是碎片,本意是为了 ...
- Android Fragment和Activity的交互介绍
Fragment和Activity的交互 一个Fragment的实例总是和包括它的Activity直接相关. fragment能够通过getActivity() 方法来获得Activity的实例.然后 ...
- Android: Fragment编程指南
本文来自于www.lanttor.org Fragment代表了Activity里的一个行为,或者Activity UI的一部分.你可以在一个activity里构造多个Fragment,也可以在多个a ...
- android fragment 的用法以及与activity的交互和保存数据的方法,包括屏幕切换(转载)!
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 1.管理Fragment回退栈 类似与Android系统为Acti ...
随机推荐
- poj 2777Count Color
http://poj.org/problem?id=2777 注意:a可能比b大 #include <cstdio> #include <cstring> #include & ...
- Mac中的快捷键
Mac中主要有四个修饰键,分别是Command,Control,Option和Shift,这四个键分别有自己的图案 基本快捷键 Command是Mac里最重要的修饰键,在大多数情况下相当于Window ...
- mybatis insertUseGeneratedKeys
mybatis中的一个坑:预期:传入的Record中会生动填入在db中生成的id值. 使用 insertUseGeneratedKeys插入数据时,如果id字段不是AUTO_INCREMENT,则不 ...
- Oracle 用户权限管理
SQL> select * from ROLE_SYS_PRIVS where ROLE='RESOURCE'; ROLE PRIVILEGE ADM --------------------- ...
- 【模拟】XMU 1054 Hacker
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1054 题目大意: 多组数据,n=0结束.给定n(n<=1 000 000)和n个 ...
- 【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)
题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右 ...
- 《Linear Algebra and Its Applications》-chaper1-线性方程组-线性相关性
这篇文章主要简单的记录所谓的“线性相关性”. 线性相关性的对象是向量R^n,对于向量方程,如果说x1v1 + x2v2 + …+xmvm = 0(其中xi是常数,vi是向量)有且仅有一个平凡解,那么我 ...
- centOS 6.4挂载centOS分区
今天想用centOS打开在windows下编辑的emacs笔记,发现好像不可以自动挂载nfts分区,搜了一下,发现一大坨,还是发个文来标记下好: 首先,安装rpmforge软件库的源 命令行下输入下面 ...
- QThread 与 QObject的关系
Threads and QObjects QThread 继承 QObject..它可以发送started和finished信号,也提供了一些slot函数. QObject.可以用于多线程,可以发送信 ...
- implode 多维数组转一维数组并字符串输出
//多维数组返回一维数组,拼接字符串输出 public function r_implode( $glue, $pieces ) { foreach( $pieces as $r_pieces ) { ...