`
huaxin803
  • 浏览: 113413 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android Fragment---给Activity创建事件回调

 
阅读更多
在某些案例中,可能需要Fragment与Activity共享事件。在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法。当Activity通过接口接受回调时,它能在必要时与布局中的其他Fragment共享信息。

例如,如果一个新闻类的应用程序在一个Activity中有两个Fragment---一个用来显示文章列表(Fragment A),另一个用来显示文章内容(Fragment B)---然后再列表项目被选中时Fragment A必须告诉Activity,以便它能告诉Fragment B显示对应的文章。在下面的例子中在Fragment A的内部声明了OnArticleSelectedListener接口。

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

然后,持有这个Fragment的Activity要实现OnArticleSelectedListener接口,并且要重写onArticleSelected()方法把来自Fragment A的事件通知给Fragment B。要确保持有Fragment的Activity实现这个接口, Fragment A 的onAttach()回调方法(当Fragment被添加到Activity时系统调用这个方法)通过类型转换onAttach()传入的Activity来实例化一个OnArticleSelectedListener的实例。

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成员就会拥有Activity实现的OnArticleSelectedListener对象的引用,以便Fragment A能够通过OnArticleSelectedListener接口定义的回调方法和Activity共享事件。例如,如果ListFragment继承了Fragment A,那么用户每次点击列表项时,系统都会调用Fragment中的onListItemClick()方法,然后调用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,Activity(或其他的Fragment)使用这个ID从应用程序的ContentProvider对象中获取对应的文章。

关于使用有效内容提供器的更多内容,请看内容提供器(Content Providers)文档。

注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。

如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar

分享到:
评论

相关推荐

    Fragment回调接口

    在Fragment与Activity交互时,Fragment提供了多种回调方法,这些方法会在特定的生命周期事件发生时被调用。例如: 1. `onAttach(Activity activity)`:当Fragment与其关联的Activity建立关联时调用,这时可以获取到...

    Fragment与Activity之间通信实例

    5. **Interface回调**:创建一个自定义接口,Fragment实现这个接口,Activity中同样实现并设置为Fragment的监听器。这样,Fragment可以通过调用接口方法来通知Activity。 6. **EventBus/LocalBroadcastManager**:...

    fragment-activity通信

    在Fragment中观察LiveData,当数据变化时,会自动回调onChanged()方法。 3. 在Activity中也可以观察同一个LiveData,实现Fragment和Activity的数据同步。 7. **使用Intent** - **启动Activity**:虽然Intent通常...

    Fragment 和Activity 通过回调交互

    总之,Fragment和Activity之间的回调交互是Android开发中常见的设计模式,通过定义接口或使用本地广播,我们可以实现Fragment与Activity之间的数据和事件传递,从而协同完成复杂的用户界面逻辑。在项目中,应根据...

    Android-单个Activity多个Fragment实现微信Android客户端

    - Fragment间通信可以通过回调接口、事件总线(如EventBus)、ViewModel共享数据等方式实现。在微信应用中,可能需要在不同的Fragment之间传递消息,如聊天记录或用户选择的联系人。 5. **PagerAdapter与ViewPager...

    Activity与Fragment通过接口回调进行通信

    接口回调是Android中Activity与Fragment通信的一种基础方法,它可以提供清晰的代码结构和低耦合度。在实际开发中,还可以结合其他通信方式,如Bundle、EventBus、LiveData等,根据项目需求选择最适合的方案。

    android activity fragment 交互 简明版

    - **回调接口**:通过定义接口并在Activity中实现,Fragment可以回调Activity中的方法,实现事件传递。例如,在Fragment中定义一个OnClickListener接口,然后在Activity中实现这个接口的方法。 - **Bundle参数**:...

    Android-Androidfragment堆栈控制器

    7. 回调函数:Fragment的`onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroyView()`, `onDestroy()`, 和 `onDetach()`等生命周期回调函数对于理解其工作原理至关重要。 8. 保存和恢复...

    Android中Fragment管理及重叠问题的解决方法

    当Activity状态改变时,如暂停或恢复,Fragment也会相应地经历相应的生命周期回调。 Fragment的栈管理对于理解和解决重叠问题至关重要。在进行Fragment切换时,通常会使用`FragmentManager`的`beginTransaction()`...

    Android-在回调中接收Activity结果没有任何样板代码

    "Android-在回调中接收Activity结果没有任何样板代码"的主题,就是关于如何避免这些冗余代码,提升代码的简洁性。 在Android API 16及之后的版本,系统提供了`ActivityResultContracts`和`ActivityResultLauncher`...

    Android Activity动态加载Fragment

    例如,Fragment可能通过接口回调或者使用`setTargetFragment()`和`onFragmentInteraction()`方法与Activity或其他Fragment进行通信。 此外,对于复杂的界面,可能会涉及到多级Fragment嵌套,即在一个Fragment中再...

    android Fragment回退栈简单示例

    - 在Fragment之间传递数据时,避免直接引用Activity的实例,而是通过接口回调或者EventBus等方式通信。 在实际项目中,AndroidFragmentTest这个项目可能包含了用于测试Fragment回退栈功能的代码示例,包括添加、...

    Fragment与Activity使用Handler进行交互

    在Android应用开发中,Fragment和Activity是两个非常重要的组件,它们负责展示用户界面并处理用户交互。有时,我们可能需要在Fragment和Activity之间进行复杂的通信,例如传递数据或执行异步任务。在这种情况下,...

    Fragment实例-Android Studio项目

    当Fragment的状态改变时,相应的回调方法会被调用。同时,Fragment可以与包含它的Activity通过onAttach(), onActivityCreated(), onDetach()等方法进行交互。 4. **Fragment通信** Fragment之间可以通过`...

    Fragment的介绍,以及Fragment与Activity之间的通信

    Fragment与Activity之间的通信是通过接口、回调、Bundle参数和公共方法实现的。以下是常见的通信方式: 1. **Interface回调**:Fragment定义一个接口,Activity实现该接口。当Fragment需要与Activity交互时,调用...

    Android Fragment实例

    - Fragment可以通过回调接口(如OnFragmentInteractionListener)与Activity通信,也可以直接调用Activity的方法(如果Activity是其父类),或者使用EventBus、LiveData等更复杂的数据绑定机制。 5. **...

    Android代码-安卓原生Fragment 演示

    其中,使用Interface是最常见的,每个Fragment定义一个接口,Activity实现该接口作为回调。 4. **Fragment的保存和恢复状态**: 当Activity因配置改变(如屏幕旋转)而销毁并重建时,Fragment的状态可以被保存。...

    Android-Fragment和Activity的传值通例子

    但可以通过回调方法,由Activity接收Intent数据后再传递给Fragment。 2. Bundle传递:Fragment在被添加到Activity时,可以通过Bundle参数传递数据。在创建Fragment实例时,可以通过setArguments(Bundle)方法设置...

    Activity如何改变Fragment的UI

    在Android开发中,Activity与Fragment是两个核心组件,它们共同构建了用户界面。Fragment可以看作是可重用的UI模块,而Activity则扮演着容器的角色,管理着多个Fragment的生命周期。当我们需要在Activity中改变...

    android Fragment Activity

    总结起来,"android Fragment Activity"涉及的是如何在Android应用中结合使用Fragment和Activity来构建用户界面,通过理解它们的生命周期、交互方式以及布局管理,开发者能够创建出高效且用户体验良好的应用程序。...

Global site tag (gtag.js) - Google Analytics