Fragment向Activity传值
来源:互联网 发布:建阿里云网站视频教程 编辑:程序博客网 时间:2024/05/17 04:09
1、为Activity创建事件回调方法
在一些情况下, 你可能需要一个fragment与activity分享事件。 一个好的方法是在fragment中定义一个回调的interface, 并要求宿主activity实现它。当activity通过interface接收到一个回调, 必要时它可以和在layout中的其他fragment分享信息。例如, 如果一个新的应用在activity中有2个fragment – 一个用来显示文章列表(framgent A), 另一个显示文章内容(fragment B) – 然后 framgent A必须告诉activity何时一个list item被选中,然后它可以告诉fragmentB去显示文章。
在这个例子中, OnArticleSelectedListener 接口在fragment A中声明:
复制代码代码如下:
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 B,从fragment A到来的事件。为了确保宿主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 implementOnArticleSelectedListener");
}
}
//...
}
如果activity没有实现接口,fragment会抛出 ClassCastException 异常。正常情形下,mListener成员会保持一个到activity的OnArticleSelectedListener实现的引用,因此fragment A可以通过调用在OnArticleSelectedListener接口中定义的方法分享事件给activity。例如,如果fragment A是一个 ListFragment的子类, 每次用户点击一个列表项,系统调用在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)用来从应用的 ContentProvider 获取文章。
0 0
- activity向Fragment传值
- Activity向Fragment传值
- Activity向fragment传值
- Fragment向Activity传值
- Fragment向Activity传值
- Activity向Fragment传值
- Activity向Fragment传值
- Fragment向另一个Activity传值
- activity向另一个activity中的fragment传值
- 45 Android activity 向 fragment 传值
- 安卓中实现Activity向Fragment传值
- 安卓中回调实现Fragment向Activity传值
- 利用Bundle完成Activity向Fragment传值
- Activity向Fragment中传值
- Fragment向activity中传值
- Activity向Fragment中传值
- Activity向Fragment中传值
- Activity向Fragment中传值
- Android自定义控件,画一条线
- 多线程简单实现,会产生不同步问题。
- 简单方法实现Android阅读器分页
- 关于 Redis Double的精度问题
- Windows核心编程 第三章 内核对象
- Fragment向Activity传值
- 集成通讯录(第三方框架RHAddressBook)
- JAVA面试宝典3
- CentOS7 服务启动命令
- Qt 菜鸟的坑 QAbstractSocket::isValid()
- 【Java菜鸟 03】InputStreamReader 和BufferedReader
- 取整
- CF 597A Divisibility
- 【华为练习题】字符出现频率