在某些案例中,可能需要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与Activity交互时,Fragment提供了多种回调方法,这些方法会在特定的生命周期事件发生时被调用。例如: 1. `onAttach(Activity activity)`:当Fragment与其关联的Activity建立关联时调用,这时可以获取到...
5. **Interface回调**:创建一个自定义接口,Fragment实现这个接口,Activity中同样实现并设置为Fragment的监听器。这样,Fragment可以通过调用接口方法来通知Activity。 6. **EventBus/LocalBroadcastManager**:...
在Fragment中观察LiveData,当数据变化时,会自动回调onChanged()方法。 3. 在Activity中也可以观察同一个LiveData,实现Fragment和Activity的数据同步。 7. **使用Intent** - **启动Activity**:虽然Intent通常...
总之,Fragment和Activity之间的回调交互是Android开发中常见的设计模式,通过定义接口或使用本地广播,我们可以实现Fragment与Activity之间的数据和事件传递,从而协同完成复杂的用户界面逻辑。在项目中,应根据...
- Fragment间通信可以通过回调接口、事件总线(如EventBus)、ViewModel共享数据等方式实现。在微信应用中,可能需要在不同的Fragment之间传递消息,如聊天记录或用户选择的联系人。 5. **PagerAdapter与ViewPager...
接口回调是Android中Activity与Fragment通信的一种基础方法,它可以提供清晰的代码结构和低耦合度。在实际开发中,还可以结合其他通信方式,如Bundle、EventBus、LiveData等,根据项目需求选择最适合的方案。
- **回调接口**:通过定义接口并在Activity中实现,Fragment可以回调Activity中的方法,实现事件传递。例如,在Fragment中定义一个OnClickListener接口,然后在Activity中实现这个接口的方法。 - **Bundle参数**:...
7. 回调函数:Fragment的`onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroyView()`, `onDestroy()`, 和 `onDetach()`等生命周期回调函数对于理解其工作原理至关重要。 8. 保存和恢复...
当Activity状态改变时,如暂停或恢复,Fragment也会相应地经历相应的生命周期回调。 Fragment的栈管理对于理解和解决重叠问题至关重要。在进行Fragment切换时,通常会使用`FragmentManager`的`beginTransaction()`...
"Android-在回调中接收Activity结果没有任何样板代码"的主题,就是关于如何避免这些冗余代码,提升代码的简洁性。 在Android API 16及之后的版本,系统提供了`ActivityResultContracts`和`ActivityResultLauncher`...
例如,Fragment可能通过接口回调或者使用`setTargetFragment()`和`onFragmentInteraction()`方法与Activity或其他Fragment进行通信。 此外,对于复杂的界面,可能会涉及到多级Fragment嵌套,即在一个Fragment中再...
- 在Fragment之间传递数据时,避免直接引用Activity的实例,而是通过接口回调或者EventBus等方式通信。 在实际项目中,AndroidFragmentTest这个项目可能包含了用于测试Fragment回退栈功能的代码示例,包括添加、...
在Android应用开发中,Fragment和Activity是两个非常重要的组件,它们负责展示用户界面并处理用户交互。有时,我们可能需要在Fragment和Activity之间进行复杂的通信,例如传递数据或执行异步任务。在这种情况下,...
当Fragment的状态改变时,相应的回调方法会被调用。同时,Fragment可以与包含它的Activity通过onAttach(), onActivityCreated(), onDetach()等方法进行交互。 4. **Fragment通信** Fragment之间可以通过`...
Fragment与Activity之间的通信是通过接口、回调、Bundle参数和公共方法实现的。以下是常见的通信方式: 1. **Interface回调**:Fragment定义一个接口,Activity实现该接口。当Fragment需要与Activity交互时,调用...
- Fragment可以通过回调接口(如OnFragmentInteractionListener)与Activity通信,也可以直接调用Activity的方法(如果Activity是其父类),或者使用EventBus、LiveData等更复杂的数据绑定机制。 5. **...
其中,使用Interface是最常见的,每个Fragment定义一个接口,Activity实现该接口作为回调。 4. **Fragment的保存和恢复状态**: 当Activity因配置改变(如屏幕旋转)而销毁并重建时,Fragment的状态可以被保存。...
但可以通过回调方法,由Activity接收Intent数据后再传递给Fragment。 2. Bundle传递:Fragment在被添加到Activity时,可以通过Bundle参数传递数据。在创建Fragment实例时,可以通过setArguments(Bundle)方法设置...
在Android开发中,Activity与Fragment是两个核心组件,它们共同构建了用户界面。Fragment可以看作是可重用的UI模块,而Activity则扮演着容器的角色,管理着多个Fragment的生命周期。当我们需要在Activity中改变...
总结起来,"android Fragment Activity"涉及的是如何在Android应用中结合使用Fragment和Activity来构建用户界面,通过理解它们的生命周期、交互方式以及布局管理,开发者能够创建出高效且用户体验良好的应用程序。...