Activity與Fragment之間的通信詳解

jopen 8年前發布 | 13K 次閱讀 Android開發 移動開發

      當我們使用Fragment的時候會常常與其他的Fragment或者宿主Activity進行交互,今天我們就來講講Fragment和Activity之間如何進行通信。

      一、 接口回調機制

     在講Fragment和Android通信之前,我們先看一個應用場景,現在有一個需求,在Activity中有一個Button,有個一TextView。現在業務要求是這樣,點擊Button,改變TextView的值。這是一個再簡單不過的Demo,我們通常會這樣實現,實例化兩個控件,然后為Button添加一個onClickListener事件,然后當前Activity實現onClickListener接口,實現onClick方法。在onClik方法中改變TextView的值。怎么樣是不是很簡單?接下來,我們說回Fragment,現在你就把Fragment假想成一個Button,當Fragment中有事件觸發,修改Activity中是視圖信息。邏輯和實現Button的點擊事件一樣。我們在fragment里面定義一個回調接口(相當于Button的OnClickListener),然后要求宿主activity實現它。當activity通過這個接口接收到一個回調。接下來看下偽代碼

   

public class FragmentA extends Fragment {

   public interface IOnChangUI{
       void onChandUI();
   } 

  private IOnChangUI mListener;
    ...
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnArticleSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
        }
    }
    ...
     @Override
   public void onClick(View view ) { 
        mListener.onArticleSelected(noteUri);
    }

 }


這樣接口回調機制實現Fragment和Activity之間的通信就完成了

      二、廣播實現通信

      這個實現起來也比較簡單,在宿主Activity里面注冊廣播,當需要通信的時候在Fragment中發送廣播,宿主Activity中接受到廣播,進行相應處理即可。這種方式比較靈活,也比較簡單,沒有接口回調那么多接口和處理。Fragment和Activity之間耦合度也較低

     三、使用第三方框架EventBus

     這個可以說是最簡單的一種方式,EventBus是專門用于組件間通信的一個開源框架,使用起來也就幾行代碼的事情,讓Fragment和Activity之間沒有耦合。但弊端也顯而易見,使用框架固然簡單,但性能上肯定沒有你自己實現高。當就目前設備性能而言,這點性能浪費還是可以接受的。

   

       通信的方式或許還有其他,我自己常用就三種方式。最好還有一點需要提醒大家,無論你使用那種方式,都必須考慮一個問題,Fragment的拓展性,Fragment設計出來的初衷是組件的碎片化,易于復用,千萬不要讓Fragment和Activity高度耦合,那樣Fragment就失去他原本的意義了   







來自: http://blog.csdn.net/soul_code/article/details/50338653

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!