在某些案例中,可能需要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从歌曲列表中获取对应的歌曲信息。
分享到:
相关推荐
主要介绍了AndroidX下使用Activity和Fragment的变化详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在之前的博文中简单介绍过如何实现fragment之间的信息交互:《Android中Fragment与Activity之间的交互(两种实现方式)》,今天继续给大家介绍一种可以实现此效果的另外一种方式EventBus。(相比于handler,接口回调...
Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当Fragment嵌套的时候,由于FragmentActivity的BUG导致只会回调最外那层Fragment的...
在Android开发中我们很多地方都用到了方法的回调,回调就是把方法的定义和功能导入实现分开的一种机制,目的是为了解耦他的本质是基于观察者设计模式,即观察者设计模式的的简化版,例如:在下载时候的进度回调,在...
每个生命周期回调方法在回调方法执行的开始和结束时都有一个日志消息输出。 活动和片段的生命周期都被跟踪。 有用的快捷键 以下三个快捷方式是比使用鼠标和“项目”窗格(左窗格)更快的文件导航方法。 Ctrl + N ...
Fragment的主要意义就是提供与Activity绑定的生命周期回调。 Fragment不一定要向Activity的视图层级中添加View. 当某个模块需要获得Activity的生命周期回调的时候,就可以考虑通过Fragment来实现. 例如: ...
value[int[], 所要绑定控件的id]: 用于绑定控件item点击事件的回调方法, 方法名称任意, 参数必须为(AdapterView, View, int, long) @AILongClick: 方法注解 value[int[], 所要绑定控件的id]: 用于...
(1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的运行机制,通过Fragment栈对主要模块的Webview进行管理,实现对不同模块之间切换的控制。 (2)针对跨域数据交互问题,指出并分析了...
12.8万能的接口回调 165 13.1 Android数据存储分类 166 13.2 Shared Preferences存储 166 13.3 测试类的编写示例 170 13.4内部存储 173 13.5外部存储 176 14.1 SQL的分类 184 14.2常用SQL语句的使用 184 14.3数据库...
AsyncTaskLoader 用于 Android 的回调“注入”库,它使用注释处理来生成样板代码。 它侧重于在 Activity 或 Fragment 中使用多个 AsyncTaskLoader。 通过使用@OnCreateLoader 、 @OnLoadFinished等注释方法来消除回...
13.2.6 响应handleMessage回调 13.3 使用工作线程 13.3.1 从菜单调用工作线程 13.3.2 在工作线程与主线程之间通信 13.3.3 线程行为概述 13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 ...
6. 二维码解析回调函数,代码放到SecondActivity CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() { @Override public void onAnalyzeSuccess(Bitmap mBitmap, String result) { ...
13.2.6 响应handleMessage回调 13.3 使用工作线程 13.3.1 从菜单调用工作线程 13.3.2 在工作线程与主线程之间通信 13.3.3 线程行为概述 13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 ...
Android的设计之中,任何耗时的操作都不能放在UI主线程之中。所以类似于网络操作等等耗时的操作都需要使用异步的实现。而在ContentProvider之中,也有可能...(2)loaderManager的事件回调接口, LoaderManager.Loader
丰富的回调接口 onSuccess(Call<T> call, T response) onError(Call<T> call, HttpError error) onStart(Call<T> call) 和onCompleted(Call<T> call, @Nullable Throwable t)等 动态替换retrofit 的baseUrl ...
回调式onActivityResult RouterHandler、Activity支持等待异步完成(hold),并可设置超时时间 RouterHandler指定执行线程 注入拦截器,支持全局拦截器和局部拦截器,面向切面编程 更为多样化的Fragment页面跳转能力 ...
RecyclerView自动加载、加载完成回调,以及item进入动画 多楼层回复自定义控件的实现 严格模式(StrictMode)的设置及用法 使用GreenDao对数据进行本地缓存 对网络状态的实时检测 对UIL的个性化设置、封装和基本...
LoaderManager.LoaderCallbacks是3.0之后出现的新特性,通过LoaderManager.LoaderCallbacks接口可以很轻松的实现异步加载数据到Fragment或Activity 中,Loaders提供了回调机制onLoadFinished()通知最终的运行结果,...
}在 Fragment中使用布局中,同 Activity中使用一致,请在 Toolbar下的需要加载的内容最外层套一层 FrameLayout(为何需要这样做)代码中方法简介方法参数作用registerFragment,View,LoadRetryRefreshListener...