一、獲取彼此的對象
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();
}
}