Fragment與Activity之間的通信

Activity傳遞給Fragmetn

1.使用SetArgumets()方法

該方法一般用于在Activity中復用同一個Fragment,通過setArguments()來設置不同的標記,展示不同的數(shù)據(jù)。

//舉例  
//Activity中
Fragment fm = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("hello", hello);
fm.setArguments(bundle);

//Fragment中   
Bundle bundle = getArguments();
//獲取bundle之后,再用bundle獲取對應的數(shù)據(jù)  
String hello = bundle.getString("hello");
2.使用findFragmentByTag()方法獲取Fragment,調(diào)用Fragment的方法
//舉例:
 //獲取當前頁面的fragment,這里的Tag是在將Fragment添加到布局的時候設置的。
Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag(tag);
//調(diào)用相應的方法
fragment.xxx();

Fragmetn傳遞給Activity

1.通過使用接口
//舉例  

//Fragment中-----------------------------------------------   

//定義接口
public interface MyListener{
  public abstract void sendMessage(String message);
}  

//定義接口的實例  
private MyListener listener;  

//在適當位置初始化 listener
listener = (MyListener) getActivity();

//Fragment中對應的方法中,通過調(diào)用接口的方法,傳遞數(shù)據(jù)  
if(null != listener)
  listener.sendMessage("hello");  


//Activity中 -----------------------------------------------  
Activity直接實現(xiàn)該接口  
public class MainActivity extends Activity implements MyListener{
  
  //這里做接收到數(shù)據(jù)的操作
  @Override
  public void sendMessage(String message){
  }
}

補充:當然,也可以在Fragment中設置一個方法,專門進行Listenr初始化

//定義設置接口的方法  
public void setMyListener( MyListener listener ){
  this.listener = listener;
}  

Fragmetn傳遞給Fragment

1.調(diào)用 findFragmentById()方法獲取對應Fragment,調(diào)用Fragment中的方法。

PS:該方法試用于,F(xiàn)ragment都設置了id的時候

//舉例  
Fragment1 f1 = (Fragment1) getFragmentManager().findFragmentById(R.id.fragment1);  
//調(diào)用對應的方法
f1.xxx();
2.調(diào)用 findFragmentById()方法獲取對應Fragment,再通過Fragment獲取對應的View,進行操作
//舉例  
//獲取Fragment的方法上面講了,這里不說了  
TextView tv1 = (TextView) f1.getView().findViewByid(R.id.tv1);
//進行想應的操作
tv1.xxxx;
3.調(diào)用 getactivity()方法獲取對應activity,再通過activity的 findViewById()獲取對應的View,進行操作

PS:說明,屬于Activity中的Fragment,在Activity中是可以獲取到Fragment中的View控件的

//舉例    
TextView tv1 = (TextView) getActivity.findViewByid(R.id.tv1);
//進行想應的操作
tv1.xxxx;

補充,試用其他方式
1.使用本地廣播,進行廣播通知。
2.使用EventBus 或者 RxBus通知。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容