Activity与Fragment之间的数据交互分为2种情况
一、Activity将数据传到Fragment
二、Fragment将数据传到Activity
一、将Activity将数据传到Fragment有2种方法
1.在Activity定义一个带返回值的方法,可以是static和非静态的
public String getTitles(){
return "hello world1";
}
public static String getTitles1(){
return "hello world2";
}
然后在Fragment中的onAttach中调用
@Override
public void onAttach(Context context) {
super.onAttach(context);
titles = ((MainActivity)getActivity()).getTitles();
titles2 = MainActivity.getTitles1();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = (View) inflater.inflate(R.layout.list_fragment, container, false);
TextView name= (TextView)mView.findViewById(R.id.name);
name.setText(titles);
TextView time= (TextView)mView.findViewById(R.id.time);
time.setText(titles2);
return mView;
}
2.使用Bundle来传递参数,这是最常用的一种
在Activity中传出
MyFragment myFragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("title",titles);//这里的titles就是我们要传的值
myFragment.setArguments(bundle);
在Fragment中接收
Bundle bundle = getArguments();
if(bundle!=null){
titles = bundle.getString("title");
}
二、Fragment将数据传到Activity
将Fragment的数据传到Activity,需要现在Fragment定义一个回调接口,在接口中添加一个实现方法,并在Fragment中调用这个方法,并传值
Fragment中代码
// 用来与外部activity交互,获取到宿主activity
private CallBackInterface callBackInterface;
// activity实现的接口方法
public interface CallBackInterface {
void gettValus(String str);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.name:
callBackInterface.gettValus("hello1");
break;
case R.id.time:
callBackInterface.gettValus("hello2");
break;
default:
callBackInterface.gettValus("hello3");
}
}
宿主Activity implements这个接口,
Activity中代码
public class MainActivity extends BaseActivity implements ListsFragment.CallBackInterface{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initImgViews(R.layout.activity_main,this);//为了让图片覆盖title而进行的自定义
context = this;
}
@Override
public void gettValus(String str) {
mSigninTitle.setText(str);
}
}
另外Activity与Activity之间的数据传递方法就比较多了 Intent 、Bundle
另外Fragment与Fragment之间的数据传递就用接口回调的方法