版权声明:本文为博主收集的资料,欢迎参考。未经本人允许,禁止转载 https://blog.csdn.net/z302766296/article/details/50825672
参考文章:http://blog.csdn.net/harvic880925/article/details/44966913
最近在项目中需要实现这样的一个需求:
同一个Activity中有两个Fragment,然后有两Fragment。两Fragment中又嵌套着不同的ListView。
然后实现从Fragment1中的ListView点击item之后添加到Fragment2的ListView中
先来了解下这个情况。
关于Fragment的数据传递,其实有两种情况
情况一:Fragment之间的显示和隐藏是使用replace去实现的
情况二:Fragment之间的显示和隐藏是使用hide和show方法实现的
这个大家都知道了,具体看自己项目需求。
具体情况有不同的解决方法,
对于情况一,我们可以使用fragment.setArgument()方法传递数据(详细参考于大神的blog)
重点说说第二种情况吧,通过接口回调的方法实现数据传递
文献参考:http://www.cnblogs.com/kissazi2/p/3440257.html
设置接口回调的步骤:
1.Fragment1中定义一个接口
public interface onDataChangedListener {
void onDataChanged(HarvestBean bean); //参数为用户需要传递的数据内容,这里我用的是一个Bean对象
}
2.同时在Fragment1中的某个方法实例化该接口
onDataChangedListener listener = (onDataChangedListener) getActivity();
listener.onDataChanged((HarvestBean) msg.obj);
P
S:在这里我是直接传入一个Bean对象的,因为我在onDataChanged(HarvestBean bean);方法里面设置的参数为Bean
3.在父Activity中实现该接口并重写onDataChanged();方法,同时通过调用Fragment2的updateData();方法更新Fragment2的数据
@Override
public void onDataChanged(HarvestBean bean) {
if (expressFragment != null) {
expressFragment.updateData(bean);
} else {
Log.i("harvest", "为空?");
}
}
4.在Fragment2中创建一个公共的方法updateData(HarvestBean bean)方法用于更新Fragment2中LitView的数据
List<HarvestBean> data = new ArrayList<>();
public void updateData(HarvestBean harvestBean) {
bean = harvestBean;
data.add(bean);
mLv_express.setAdapter(new ExpressAdapter(getActivity(), data));
}
这样就实现了我们的需求了。
关于接口回调,在论坛里面还有那么一句有趣的话了解为啥子用接口回调
为什么要用回调函数?举例如下
你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就正常函数调用.
你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就正常函数调用.
但是今天你妈包饺子,花的时间比较长,你跑啊跑啊,就烦了.于是你给你妈说,我先出去玩会,开饭的时候打我手机.等过了一阵,你妈给你打电话说"开饭啦,快回来吃饭吧!"
其中,你告诉你妈打手机找你,就是个你把回调函数句柄保存到你妈的动作.你妈打电话叫你,就是个回调过程.
转自:http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/eec507cf7e72d20f92457eb2.html
其中,你告诉你妈打手机找你,就是个你把回调函数句柄保存到你妈的动作.你妈打电话叫你,就是个回调过程.
转自:http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/eec507cf7e72d20f92457eb2.html