Fragment與Activity通信詳解
動(dòng)態(tài)加載的Fragment
Activity => Fragment
實(shí)例化 bundle類 傳遞給 Fragment
//動(dòng)態(tài)加載?fragment
????????Fragment?fragment?=?new?Fragment();?//這個(gè)是我們自己定義的?Fragment
????????FragmentManager?fragmentManager?=?getFragmentManager();
????????FragmentTransaction?fragmentTransaction?=?fragmentManager.beginTransaction();
????????//實(shí)例化bundle類
????????Bundle?bundle?=?new?Bundle();
????????bundle.putString("title","學(xué)習(xí)雷鋒好榜樣");
????????//傳遞數(shù)據(jù)
????????fragment.setArguments(bundle);
????????fragmentTransaction.addToBackStack(null);?//后退按鍵?允許
????????fragmentTransaction.add(R.id.linear,fragment);
????????fragmentTransaction.commit();Fragment =>Activity
實(shí)質(zhì)就是調(diào)用Activity中的方法
Fragment.java
public?interface?MyListener{
????????public?void?sayHello(String?str);
????}
????@Override
????public?void?onAttach(Activity?activity)?{
????????MyListener?listener?=?(MyListener)getActivity();
????????listener.sayHello("Fragment?傳遞給?Activity?的數(shù)據(jù)!");
????????super.onAttach(activity);
????}MainActivity.java
public?class?MainActivity?extends?ActionBarActivity?implements?Fragment.MyListener
...
...
???@Override
????public?void?sayHello(String?str)?{
????????Toast.makeText(MainActivity.this,str,Toast.LENGTH_LONG).show();
????}靜態(tài)加載的Fragment
Activity => Fragment
實(shí)質(zhì)就是調(diào)用Fragment類中的方法
public?class?Fragment?extends?android.app.Fragment?{
????private?String?str;
????public?void?setStr(String?str)?{
????????this.str?=?str;
????}
????public?String?getStr()?{
????????return?str;
????}MainActivity.java
FragmentManager?fragmentManager?=?getFragmentManager();
????????android.app.Fragment?fragmentById?=?fragmentManager.findFragmentById(R.id.fragment);
????????Fragment?fragment?=?(Fragment)fragmentById;
????????fragment.setStr("123");注意:Fragment 的 onCreateView的時(shí)候,Activity中的 setStr沒有執(zhí)行
?所以是無(wú)法在接收到的
“
Fragment =>Activity (和動(dòng)態(tài)加載一致)





