最近遇到一个fragment和Activity之间传输数据的问题,当时本能想到了这个方法
Bundle bundle=getArguments();
这样做当然是可以的,但是好像Api里不建议这么做,于是我就想到回调函数。回调函数传参数好像可以试试,于是我绞尽脑汁(原谅我薄弱的基础),在一些网上提供的方法上不断尝试终于成功了,赶紧在这里记下我的笔记,省的忘了
第一步当然是写出要回调的接口:
public interface AgrotechCallBack {
public void callbackFun(String arg);
}
第二步是在要穿参数的fragment和Activity里实现这个接口
fragment里要实现的是
@Override
public void onAttach(Activity activity) {
agrotechCallBack= (AgrotechCallBack) activity;
super.onAttach(activity);
}
Activity里要实现的是:
先实现这个接口,然后再方法里操作
@Override
public void onAttachFragment(android.app.Fragment fragment) {
agrotechCallBack= (AgrotechCallBack) fragment;
super.onAttachFragment(fragment);
}
这个回调是成功了,接下来就要在实现的接口里的方法来做你要做的操作,那么在另一个你要类里的同样通过接口实现的方法,自然就会执行,就可以得到你要的参数了。
———-分割线
刚从网上看了一个方法很不错,所以就顺手复制到下面了,跟上面的方法是异曲同工。转自::::::
http://www.cnblogs.com/mengdd/archive/2013/01/11/2856374.html
**
创建事件回调
**
一些情况下,可能需要fragment和activity共享事件,一个比较好的做法是在fragment里面定义一个回调接口,然后要求宿主activity实现它。
当activity通过这个接口接收到一个回调,它可以同布局中的其他fragment分享这个信息。
例如,一个新闻显示应用在一个activity中有两个fragment,一个fragment A显示文章题目的列表,一个fragment B显示文章。
所以当一个文章被选择的时候,fragment A必须通知activity,然后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。
为了确保宿主activity实现这个接口,fragment A的onAttach() 方法(这个方法在fragment 被加入到activity中时由系统调用)中通过将传入的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接口的一个引用,所以通过调用OnArticleSelectedListener接口的方法,fragment A可以和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);
}
...
}