国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Fragment與Activity之間的相互通信實例代碼

2019-12-12 04:50:39
字體:
來源:轉載
供稿:網友

Android Fragment與Activity之間的相互通信

前言

自從Android3.0引入Fragment之后,主要是為了支持動態靈活的界面設計和屏幕的適配問題。Fragmenty不能單獨存在,必須依賴Activity作為視圖展示的一部分,同事它具有自己的生命周期,接收它自己的事件,具有更加靈活的特性,如今Fragment已經被廣泛的應用到App開發中,最常見的就是單Activity多Fragment的模式。Fragment依賴于Activity而存在,就不可避免需要與Activity進行交互,在這里就簡單的介紹三種常用的交互方式。

一、接口方式

在fragment類中定義一個接口并在Activity中實現它。Fragment在onAttach()回調函數中獲取接口的具體實現的對象。后面,fragment就可以調用接口中的方法實現與Activity的通信。

在Android5.0之后廢除了onAttach(Activity activity)的方法,轉而使用onAttach(Context context),也就是傳遞的參數發生變化

public interface showMsgListener{    void showMsg(String str);  }  private showMsgListener msgListener;  @Override  public void onAttach(Activity activity) {    super.onAttach(activity);    try {      if(activity!=null){        msgListener=(MainActivity)activity;      }    } catch (ClassCastException e) {      throw new ClassCastException(activity.toString()          + " must implement showMsgListener");    }  }    mButton.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        msgListener.showMsg("Hello Android!(接口)");      }    });

在Activity中需要實現該接口

 @Override  public void showMsg(String str) {    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();  }

二、廣播

在Activity中注冊廣播接收器,在Fragment中發送廣播

  private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {      String action = intent.getAction();      if (action.equals(ACTION_NAME)) {        String msg = intent.getStringExtra("msg");        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();      }    }  };  public void registerBoradcastReceiver() {    IntentFilter myIntentFilter = new IntentFilter();    myIntentFilter.addAction(ACTION_NAME);    registerReceiver(mBroadcastReceiver, myIntentFilter);  }  @Override  protected void onDestroy() {    super.onDestroy();    unregisterReceiver(mBroadcastReceiver);  }

三、Fragment 從Activity獲取數據

在Fragment 的getInstance()方法中setArguments()設置參數

public static Fragment getInstance(String msg){    Bundle bundle = new Bundle();    bundle.putString("msg",msg);    MainFragment fragment=new MainFragment();    fragment.setArguments(bundle);    return fragment;  }

再通過getArguments()方法獲取

 public void initDatas() {    Bundle bundle=getArguments();    if(bundle!=null){      String msg=bundle.getString("msg");      Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();    }  }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连城县| 永吉县| 奎屯市| 历史| 枣庄市| 大渡口区| 临清市| 松江区| 奉化市| 怀安县| 金寨县| 凯里市| 玉田县| 德江县| 广州市| 奉新县| 潢川县| 卢龙县| 汾阳市| 日喀则市| 合川市| 高淳县| 大竹县| 肇源县| 沙田区| 南靖县| 东莞市| 莆田市| 章丘市| 萨嘎县| 茂名市| 正安县| 西乌珠穆沁旗| 江油市| 台中市| 梅州市| 玉山县| 讷河市| 平陆县| 武乡县| 尤溪县|