Fragment之间传递数据

117 阅读2分钟

目录

通过Activity传递

画面显示(XML)

逻辑代码(Java)

通过接口传递数据


通过Activity传

画面显示(XML)

首先这是一个Activit显示上有两个Fragment容器,是为了显示两个Fragment。

然后Activity加载了两个Fragment的数据并依次replace到了两个容器中。

此时Activity就有了两个Fragment的对象,方便后续FragmentA获取FragmentB。


逻辑代码(Java)

在FragmentA和FragmentB中设置一个setData方法去改动一些TextView什么的。

然后最重要的一步!!

1)用getActivity()方法获取Activity的实例对象。

2)通过这个Activity对象去获取另一个Fragment的对象,通过findFragmentById/findFragmentByTag找到指定的另一个Fragment,或者Fragment作为Activity的公有成员变量直接使用。

3)然后再通过此FragmentB对象去调用Fragment的setData()方法,就可以从A传递给B数据了。

所以一个FragmentA先拿到其Activity对象,再通过这个Activity找到指定的FragmentB对象,然后调用其B方法,从而A传递B数据。


通过接口传递数据

目的:FragmentA想要发送数据给B。

在FragmentA中设置接口以及接收接口参数,和成员变量。

//保存FragmentB传来的接口对象
private OnFragmentChangeInfo mOnFragmentChangeInfo;

//设置公有方法,让FragmentB调用
public void SetOnFragmentChangeInfo(OnFragmentChangeInfo info){
    this.mOnFragmentChangeInfo=info;
}

//重写此接口的FragmentB需要什么数据就设置什么数据
interface OnFragmentChangeInfo{
    void String message(String data);
}

1)先让FragmentB获得FragmentA的实例对象,才能调用SetOnFragmentChangeInfo()方法和OnFragmentChangeInfo接口。


真正实现:是在FragmentB重写OnFragmentChangeInfo接口。

((FragmentA)fragment).setSetOnFragmentChangeInfo(new OnFragmentChangeInfo{
    @Override
    public void message(String data){
        tv.setText(data);
    }
});

2)此时B传给A了一个接口对象,并保存在mOnFragmentChangeInfo字段中。


//什么时候想要传给B就什么时候调用
mOnFragmentChangeInfo.message("我传过去数据咯,其他我不管咯,逻辑什么的你自己搞定");

3)这时调用传过来的对象的message方法,即可向B传数据。