日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fragment间的通信

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fragment间的通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在網上看到的一篇文章,總結的很好?

為了重用Fragment的UI組件,創建的每個Fragment都應該是自包含的、有它自己的布局和行為的模塊化組件。一旦你定義了這些可重用的Fragment,你就可以把它們跟一個Activity關聯,并把它們跟應用程序的邏輯相連來實現全部的組合式UI。

? ? ? ?現實中我們經常想要一個Fragment跟另一個Fragment進行通信,例如,要基于一個用戶事件來改變內容。所有的Fragment間的通信都是通過跟關聯的Activity來完成的。另個Fragment不應該直接通信。也就是說Fragment間不直接通信,通過Activity轉一下,按java常規,轉一下多是使用Interface實現的。

定義Interface

? ? ? ?為了讓Fragment跟它的Activity通信,你可以在Fragment類中定義一個接口,并在它所屬的Activity中實現該接口。Fragment在它的onAttach()方法執行期間捕獲該接口的實現,然后就可以調用接口方法,以便跟Activity通信。

以下是Fragment跟Activity通信的示例:

?

[java]?view plaincopyprint?
  • public?class?HeadlinesFragment?extends?ListFragment?{??
  • ????OnHeadlineSelectedListener?mCallback;??
  • ??
  • ????//?Container?Activity?must?implement?this?interface??
  • ????public?interface?OnHeadlineSelectedListener?{??
  • ????????public?void?onArticleSelected(int?position);??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onAttach(Activity?activity)?{??
  • ????????super.onAttach(activity);??
  • ??????????
  • ????????//?This?makes?sure?that?the?container?activity?has?implemented??
  • ????????//?the?callback?interface.?If?not,?it?throws?an?exception??
  • ????????try?{??
  • ????????????mCallback?=?(OnHeadlineSelectedListener)?activity;??
  • ????????}?catch?(ClassCastException?e)?{??
  • ????????????throw?new?ClassCastException(activity.toString()??
  • ????????????????????+?"?must?implement?OnHeadlineSelectedListener");??
  • ????????}??
  • ????}??
  • ??????
  • ????...??
  • }??

  • ?

    ? ? ? 現在,這個Fragment就可以通過調用OnHealdlineSelectedListener接口實例mCallback的onArticleSelected()方法(或其他的接口中的方法)給Activity發送消息。

    例如,在Fragment中的下列方法會用戶點擊列表項時被調用。該Fragment使用回調接口把該事件發送給它的父Activity。

    [java]?view plaincopyprint?
  • @Override??
  • ???public?void?onListItemClick(ListView?l,?View?v,?int?position,?long?id)?{??
  • ???????//?Send?the?event?to?the?host?activity??
  • ???????mCallback.onArticleSelected(position);??
  • ???}??
  • ?

    實現Interface

    ?

    為了從Fragment中接收事件回調,包含Fragment的Activity必須實現Fragment類中定義的接口。

    例如,下面Activity實現了上面示例中定義的接口:

    [java]?view plaincopyprint?
  • public?static?class?MainActivity?extends?Activity??
  • ????????implements?HeadlinesFragment.OnHeadlineSelectedListener{??
  • ????...??
  • ??????
  • ????public?void?onArticleSelected(int?position)?{??
  • ????????//?The?user?selected?the?headline?of?an?article?from?the?HeadlinesFragment??
  • ????????//?Do?something?here?to?display?that?article??
  • ????}??
  • }??
  • ?


    把消息傳遞給另一個Fragment

    ?

    ? ? ? ? ?通過使用findFragmentById()方法捕獲Fragment實例,宿主Activity可以把消息發送給該Fragment,然后直接調用該Fragment的公共方法。

    ? ? ? ? 例如,上面的示例,Activty通過Interface的實現方法,傳遞數據到另一個Fragment。

    ?

    [java]?view plaincopyprint?
  • public?static?class?MainActivity?extends?Activity??
  • ????????implements?HeadlinesFragment.OnHeadlineSelectedListener{??
  • ????...??
  • ??
  • ????public?void?onArticleSelected(int?position)?{??
  • ????????//?The?user?selected?the?headline?of?an?article?from?the?HeadlinesFragment??
  • ????????//?Do?something?here?to?display?that?article??
  • ??
  • ????????ArticleFragment?articleFrag?=?(ArticleFragment)??
  • ????????????????getSupportFragmentManager().findFragmentById(R.id.article_fragment);??
  • ??
  • ????????if?(articleFrag?!=?null)?{??
  • ????????????//?If?article?frag?is?available,?we're?in?two-pane?layout...??
  • ??
  • ????????????//?Call?a?method?in?the?ArticleFragment?to?update?its?content??
  • ????????????articleFrag.updateArticleView(position);??
  • ????????}?else?{??
  • ????????????//?Otherwise,?we're?in?the?one-pane?layout?and?must?swap?frags...??
  • ??
  • ????????????//?Create?fragment?and?give?it?an?argument?for?the?selected?article??
  • ????????????ArticleFragment?newFragment?=?new?ArticleFragment();??
  • ????????????Bundle?args?=?new?Bundle();??
  • ????????????args.putInt(ArticleFragment.ARG_POSITION,?position);??
  • ????????????newFragment.setArguments(args);??
  • ??????????
  • ????????????FragmentTransaction?transaction?=?getSupportFragmentManager().beginTransaction();??
  • ??
  • ????????????//?Replace?whatever?is?in?the?fragment_container?view?with?this?fragment,??
  • ????????????//?and?add?the?transaction?to?the?back?stack?so?the?user?can?navigate?back??
  • ????????????transaction.replace(R.id.fragment_container,?newFragment);??
  • ????????????transaction.addToBackStack(null);??
  • ??
  • ????????????//?Commit?the?transaction??
  • ????????????transaction.commit();??
  • ????????}??
  • ????}??
  • }??


  • Fragment中使用左右滑動菜單?中應用到了Fragment間的通信

    ?

    參考:http://developer.android.com/training/basics/fragments/communicating.html

    /**
    * @author 張興業
    * 郵箱:xy-zhang#163.com
    * android開發進階群:241395671
    *
    */

    轉載于:https://www.cnblogs.com/hudabing/p/4508236.html

    總結

    以上是生活随笔為你收集整理的Fragment间的通信的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。