Android Fragment用法之给Activity创建事件回调

在某些案例中,可能需要Fragment与Activity共享事件。在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法。当Activity通过接口接受回调时,它能在必要时与布局中的其他Fragment共享信息。例如,如果一个音乐播放器的应用程序在一个Activity中有两个Fragment—一个用来显示歌曲列表(Fragment A),另一

大家好,又见面了,我是全栈君。在某些案例中,可能需要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从歌曲列表中获取对应的歌曲信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121457.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 读取金税盘数据库_一种基于金税盘控制系统登录和数据同步的方法与流程

    读取金税盘数据库_一种基于金税盘控制系统登录和数据同步的方法与流程本发明涉及税务开票领域,更具体地,涉及一种基于金税盘控制系统登录和数据同步的方法。背景技术:在以往的增值税销方开票操作中,销方用户在执行开票操作时,往往会出现当前用户信息与所使用的金税盘信息不匹配的情况,从而导致开票失败,需要调整用户数据或者更换金税盘。另外,系统中缺少对用户使用的金税盘数据的收集,无法有效的管理记录金税盘的使用情况,而且销方用户对应的库存信息和发票信息也存在数据不全的情况。技术实…

  • 目标检测综述_通用目标检测

    目标检测综述_通用目标检测前言图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Regio…

    2022年10月13日
  • java 时间戳字符串_Java获取当前时间戳/时间戳转换

    java 时间戳字符串_Java获取当前时间戳/时间戳转换@date2017/11/25*/publicclassApp{publicstaticvoidmain(String[]args){//精确到毫秒//获取当前时间戳System.out.println(System.currentTimeMillis());System.out.println(Calendar.getInstance().getTimeInMillis());Sy…

  • [RK3288][Android6.0] DVP接口摄像头OV5640添加

    [RK3288][Android6.0] DVP接口摄像头OV5640添加Platform:RK3288OS:Android6.0Kernel:3.10.92DVP或者MIPI接口直接在cameraboard文件中改动就可以。cam_board_rk3288.xml:<?xmlversion=”1.0″?><BoardFile> <BoardXmlVersionversion=”v0.0xf.0″>…

  • CSS3选择器大全[通俗易懂]

    CSS3选择器大全[通俗易懂]1.CSS3选择器属性选择器在HTML中,通过各种各样的属性可以给元素增加很多附加的信息。例如,通过id属性可以将不同div元素进行区分。input[type=&quot;text&quot;]{width:150px;display:block;margin-bottom:10px;background-color:yellow;font-family:Verdana…

  • WebSocket协议:5分钟从入门到精通

    WebSocket协议:5分钟从入门到精通

    2021年10月14日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号