一、获取彼此的对象
1.Fragment可调用getActivity()方法获取它所在的Activity;
2.Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment。
二、通信
1.Activity——>Fragment :在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法,在Fragment对应的类里调用getArguments()获取传递来的Bundle数据。
Activity发送数据:
String text=edittext.getText().toString(); //获取字符串
MyFragment3 fragment3=new MyFragment3(); //初始化Fragment子类的对象
Bundle bundle= new Bundle(); //初始化Bundle对象
bundle.putString("content", text); //绑定字符串到Bundle对象
fragment3.setArguments(bundle); //向Fragment发送数据
FragmentManager fragmentM=getFragmentManager(); //以下为动态加载Fragment
FragmentTransaction beginTransaction = fragmentM.beginTransaction();
beginTransaction.add(R.id.layout, fragment3, "fragment3"); //动态加载Fragment
beginTransaction.addToBackStack(null);
beginTransaction.commit();
public class MyFragment3 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.fragment, container, false);
TextView text=(TextView) view.findViewById(R.id.text);
String str= getArguments().get("content")+"";//接收Activity发来的数据,并保存在String对象中
text.setText(str);
return view;
}
}
那么问题来了,静态加载的Fragment,Activity如何传值给Fragment?
在Fragment对应的Fragment类(如MyFragment)中声明一个变量,用来保存Activity传来的数据,如
private String aaa;
//定义setter、getter方法
public String getAaa(){return aaa;}
public void setAaa(String aaa){ this.aaa=aaa;}
在Activity类的函数中通过FragmentManager对象获取静态加载的Fragment对象。
FragmentManager fragmentManager=getFragmentManager();
Fragment findFragmentById=fragmentManager.findFragmentById(R.id.frag); //frag 为静态加载的Fragment的ID
MyFragment frag=(MyFragment)findFragmentById;
frag.setAaa("向fragment静态传值");
2.Fragment——>Activity:需要在Fragment中定义一个内部回调接口(参数为传递的数据),再让包含Fragment的Activity实现该回调接口。这样在Fragment子类中,可通过获取Activity对象并调用该回调方法将数据传递给Activity。
public class MyFragment3 extends Fragment{
private String code="我爱北京天安门!";
public MyListner listener;
public interface MyListner
{
public void thank(String code);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
......
return view;
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
listener=(MyListner) activity;
listener.thank(code);
super.onAttach(activity);
}
}
public class MainActivity3 extends Activity implements MyListner{
......
@Override
public void thank(String code) {
// TODO Auto-generated method stub
Toast.makeText(this, code, Toast.LENGTH_SHORT).show();
}
}