两个Activity中的Fragment之间的参数传递

这是我第一次写博客,也是在大神的指点下,因为看到大神都说菜鸟就要多写博客才可以成长,于是我鼓足勇气开始了。
自己在网上查了很多:
第一:大致总结网上的有Activity和Activity之间的数据传递,通过startActivity()和startActivityForResult(),前者只能从前到后通过Intent传递数据,后者则可以相互之间传递数据(具体做法可以百度,大神都写的很清楚了)。

第二:Activity和自身的Fragment之间的参数传递,这个很简单,Activity传递到Fagment只需要在动态的添加Fragment的时候把数据通过Bundle,setAugments(Bundle),(此处主要写的是动态配置情况,静态的添加Fragment也没差。)

        MyFragment myFragment = new MyFragment();
                Bundle bundle = new Bundle();
                bundle.putString("DATA",values);//这里的values就是我们要传的值
                myFragment.setArguments(bundle);
        第二种方式,是在宿主Activity中定义方法,将要传递的值传递到Fragment中,在Fragment中的onAttach方法中,获取到这个值。
//宿主activity中的getTitles()方法
public String getTitles(){
    return "hello";
}

//Fragment中的onAttach方法
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    //通过强转成宿主activity,就可以获取到传递过来的数据
    titles = ((MainActivity) activity).getTitles();
}

第三:同一个Activity中的不同Fragment之间的参数传递.
情况一:Fragment之间的显示和隐藏是使用replace去实现的
对于情况一,我们可以使用fragment.setArgument()方法传递数据(详细参考于大神的blog)

情况二:Fragment之间的显示和隐藏是使用hide和show方法实现的
重点说说第二种情况吧,通过接口回调的方法实现数据传递………………………………………………

    1. 设置接口回调的步骤:
    public interface onDataChangedListener {  
            void onDataChanged(HarvestBean bean);   //参数为用户需要传递的数据内容,这里我用的是一个Bean对象   
        }  
  1. 同时在Fragment1中的某个方法实例化该接口

PS:在这里我是直接传入一个Bean对象的,因为我在onDataChanged(HarvestBean bean);方法里面设置的参数为Bean


    onDataChangedListener listener = (onDataChangedListener) getActivity();  
    listener.onDataChanged((HarvestBean) msg.obj);  

3.在父Activity中实现该接口并重写onDataChanged();方法,同时通过调用Fragment2的updateData();方法更新Fragment2的数据。

  1. 在Fragment1里面写setDataChangedListener(onDataChangedListener l)方法。
    /**Fragment1中写的,以下三个*/
    private onDataChangedListener  listener ;
    //此方法用与在
    public void setonDataChangedListener (onDataChangedListener  l){
        listener  = l;
    }
    //在对应的促发方法里面调用,比如监听
    if(listener  != null){
        listener .onDataChanged((HarvestBean) msg.obj); 
    }

Fragment2中通过Activity得到Fragment1的对象,具体可以参考上面通过强制类型转化的方式得到Activity的对象,从而得到Fragment1.

/**Fragment2中调用Fragment1里面的set方法*/
getActivity().fragment1.setsetonDataChangedListener(new onDataChangedListener(){
    @Override
    onDataChanged((HarvestBean) msg.obj){
    //获取到Fragment1里面的数据obj.
    }
})

使用这种回调方式只要两个类之间可以相互调去对方的方法,则可以实现数据的传递。可以重点掌握和使用。

今天先到这里吧,下次在补充,有什么不好的地方,希望各位大神指点,毕竟我是一只小菜鸟。

你可能感兴趣的:(基础)