同一个Activity中不同Fragment的数据传递

版权声明:本文为博主收集的资料,欢迎参考。未经本人允许,禁止转载 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


猜你喜欢

转载自blog.csdn.net/z302766296/article/details/50825672