`
he91_com
  • 浏览: 376157 次
文章分类
社区版块
存档分类
最新评论

Android Fragment详解(五):Fragment与Activity通讯

 
阅读更多

与activity通讯

尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。

Fragment可以调用getActivity()方法很容易的得到它所在的activity的对象,然后就可以查找activity中的控件们(findViewById())。例如:

ViewlistView =getActivity().findViewById(R.id.list);同样的,activity也可以通过FragmentManager的方法查找它所包含的frament们。例如:

 ExampleFragment fragment =(ExampleFragment)getFragmentManager().findFragmentById(R.id.example_fragment

activity响应fragment的事件

有时,你可能需要fragmentactivity共享事件。一个好办法是在fragment中定义一个回调接口,然后在activity中实现之。

例如,还是那个新闻程序的例子,它有一个activityactivity中含有两个fragmentfragmentA显示新闻标题,fragmentB显示标题对应的内容。fragmentA必须在用户选择了某个标题时告诉activity,然后activity再告诉fragmentBfragmentB就显示出对应的内容(为什么这么麻烦?直接fragmentA告诉fragmentB不就行了?也可以啊,但是你的fragment就减少了可重用的能力。现在我只需把我的事件告诉宿主,由宿主决定如何处置,这样是不是重用性更好呢?)。如下例,OnArticleSelectedListener接口在fragmentA中定义


 public static class FragmentA extends ListFragment{
   ...
   //Container Activity must implement this interface
   public interface OnArticleSelectedListener{
       public void onArticleSelected(Uri articleUri);
   }
   ...
}

然后activity实现接口OnArticleSelectedListener,在方法onArticleSelected()中通知fragmentB。当fragment添加到activity中时,会调用fragment的方法onAttach(),这个方法中适合检查activity是否实现了OnArticleSelectedListener接口,检查方法就是对传入的activity的实例进行类型转换,如下所示:

 public static class FragmentA extends ListFragment{
   OnArticleSelectedListener mListener;
   ...
   @Override
   public void onAttach(Activity activity){
       super.onAttach(activity);
       try{
           mListener =(OnArticleSelectedListener)activity;
       }catch(ClassCastException e){
           throw new ClassCastException(activity.toString()+"must implement OnArticleSelectedListener");
       }
   }
   ...
}

如果activity没有实现那个接口,fragment抛出ClassCastException异常。如果成功了,mListener成员变量保存OnArticleSelectedListener的实例。于是fragmentA就可以调用mListener的方法来与activity共享事件。例如,如果fragmentA是一个ListFragment,每次选中列表的一项时,就会调用fragmentAonListItemClick()方法,在这个方法中调用onArticleSelected()来与activity共享事件,如下:

 public static class FragmentA extends ListFragment{
   OnArticleSelectedListener mListener;
   ...
   @Override
   public void onListItemClick(ListView l,View v,int position,long id){
       //Append the clicked item's row ID with the content provider Uri
       Uri noteUri =ContentUris.withAppendedId(ArticleColumns.CONTENT_URI,id);
       //Send the event and Uri to the host activity
       mListener.onArticleSelected(noteUri);
   }
   ...
}

onListItemClick()传入的参数id是列表的被选中的行ID,另一个fragment用这个ID来从程序的ContentProvider中取得标题的内容。


分享到:
评论

相关推荐

    android Fragment与Activity交互,互相发数据(附图详解)

    其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给Activity 此点是通过在fragment中定义接口与Activity共享数据。 2、Activity传递信息给fragment 此点主要是通过...

    Android 中Fragment与Activity通讯的详解

    Android 中Fragment与Activity通讯的详解 与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。 Fragment可以调用getActivity...

    详解Android activity与fragment之间的通信交互

    在开发过程中不可避免的会出现fragment与fragment,fragment与activity之间的通信交互问题。 本章讲述如何实现fragment与activity之间的通信。 一、APP构成 MainActivity+底部导航栏; 二、通信目的 MainActivity中...

    android Fragment与Activity互相发数据(附图详解)

    其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给Activity 此点是通过在fragment中定义接口与Activity共享数据。 2、Activity传递信息给fragment 此点主要是通过...

    AndroidX下使用Activity和Fragment的变化详解

    主要介绍了AndroidX下使用Activity和Fragment的变化详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Android Fragment的生命周期详解

    详解Android Fragment之二:Fragment的创建和生命周期  创建片元(Creating a Fragment)  To create a fragment, you must create a subclass of Fragment (or an existing subclass of it). The Fragment class...

    Android Fragment的用法实例详解

    碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示...1.静态加载:添加Fragment到Activity布局中,以xml的形式。 2.动态加载: <LinearLayout android:id=@+id/layout android:layout_width=mat

    Android开发教程之Fragment定义、创建与使用方法详解【包含Activity通讯,事务执行等】

    本文实例讲述了Android开发教程之Fragment定义、创建与使用方法。分享给大家供大家参考,具体如下: 概述 Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: 四大组件之活动(Activity) Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器...

    Android基础之Fragment与Activity交互详解

    1、为Activity创建事件回调方法在一些情况下, 你可能需要一个fragment与activity分享事件。 一个好的方法是在fragment中定义一个回调的interface, 并要求宿主activity实现它。当activity通过interface接收到一个回调...

    Android中Fragment的解析和使用详解

    前言 Android Fragment的生命周期和...AppCompatActivity就是FragmentActivity的子类,如果想使用Fragment,是要继承FragmentActivity,因为考虑到兼容的问题,我们要使用getSupportFragmentManager,而这个方法是Fragm

    Android开发 Activity和Fragment详解

    本文主要介绍Android开发 Activity和Fragment,这里对Activity和Fragment的知识做了详细讲解,并附简单代码示例,有兴趣的小伙伴可以参考下

    Android Fragment动态创建详解及示例代码

    Android Fragment 动态创建 Fragment是activity的界面中的一部分或一种行为。可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment。可以把Fragment任务模块化的一段...

    Android Activity与Fragment之间的跳转实例详解

    主要介绍了Android Activity与Fragment之间的跳转实例详解的相关资料,需要的朋友可以参考下

    Android中fragment与activity之间的交互(两种实现方式)

    之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文《详解Android中Fragment的两种创建方式》,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何...

    AndroidFragment数据传递

    Android fragemnt向activity,activity向fragment,fragment 和frament之间传递数据,详解,能运行!

    Android 两个Fragment之间的跳转和数据的传递实例详解

    Android 两个Fragment之间的跳转和数据的传递实例详解  作为一个Android的菜鸟,前些天在做项目的时候用到了fragment,需求是从一个Fragment跳转到另一个Fragment,并且还要传递数据,就像Activity的跳转一样。在...

Global site tag (gtag.js) - Google Analytics