这是我第一次写博客,也是在大神的指点下,因为看到大神都说菜鸟就要多写博客才可以成长,于是我鼓足勇气开始了。
自己在网上查了很多:
第一:大致总结网上的有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对象
}
PS:在这里我是直接传入一个Bean对象的,因为我在onDataChanged(HarvestBean bean);方法里面设置的参数为Bean
onDataChangedListener listener = (onDataChangedListener) getActivity();
listener.onDataChanged((HarvestBean) msg.obj);
3.在父Activity中实现该接口并重写onDataChanged();方法,同时通过调用Fragment2的updateData();方法更新Fragment2的数据。
/**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.
}
})
使用这种回调方式只要两个类之间可以相互调去对方的方法,则可以实现数据的传递。可以重点掌握和使用。
今天先到这里吧,下次在补充,有什么不好的地方,希望各位大神指点,毕竟我是一只小菜鸟。