生活随笔
收集整理的這篇文章主要介紹了
Fragment间的通信
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在網(wǎng)上看到的一篇文章,總結(jié)的很好?
為了重用Fragment的UI組件,創(chuàng)建的每個Fragment都應該是自包含的、有它自己的布局和行為的模塊化組件。一旦你定義了這些可重用的Fragment,你就可以把它們跟一個Activity關(guān)聯(lián),并把它們跟應用程序的邏輯相連來實現(xiàn)全部的組合式UI。
? ? ? ?現(xiàn)實中我們經(jīng)常想要一個Fragment跟另一個Fragment進行通信,例如,要基于一個用戶事件來改變內(nèi)容。所有的Fragment間的通信都是通過跟關(guān)聯(lián)的Activity來完成的。另個Fragment不應該直接通信。也就是說Fragment間不直接通信,通過Activity轉(zhuǎn)一下,按java常規(guī),轉(zhuǎn)一下多是使用Interface實現(xiàn)的。
定義Interface
? ? ? ?為了讓Fragment跟它的Activity通信,你可以在Fragment類中定義一個接口,并在它所屬的Activity中實現(xiàn)該接口。Fragment在它的onAttach()方法執(zhí)行期間捕獲該接口的實現(xiàn),然后就可以調(diào)用接口方法,以便跟Activity通信。
以下是Fragment跟Activity通信的示例:
?
[java]?view plaincopyprint?
public?class?HeadlinesFragment?extends?ListFragment?{??????OnHeadlineSelectedListener?mCallback;????????????public?interface?OnHeadlineSelectedListener?{??????????public?void?onArticleSelected(int?position);??????}????????@Override??????public?void?onAttach(Activity?activity)?{??????????super.onAttach(activity);????????????????????????????????????try?{??????????????mCallback?=?(OnHeadlineSelectedListener)?activity;??????????}?catch?(ClassCastException?e)?{??????????????throw?new?ClassCastException(activity.toString()??????????????????????+?"?must?implement?OnHeadlineSelectedListener");??????????}??????}????????????...??}?? ?
? ? ? 現(xiàn)在,這個Fragment就可以通過調(diào)用OnHealdlineSelectedListener接口實例mCallback的onArticleSelected()方法(或其他的接口中的方法)給Activity發(fā)送消息。
例如,在Fragment中的下列方法會用戶點擊列表項時被調(diào)用。該Fragment使用回調(diào)接口把該事件發(fā)送給它的父Activity。
[java]?view plaincopyprint?
@Override?????public?void?onListItemClick(ListView?l,?View?v,?int?position,?long?id)?{????????????????mCallback.onArticleSelected(position);?????}?? ?
實現(xiàn)Interface
?
為了從Fragment中接收事件回調(diào),包含F(xiàn)ragment的Activity必須實現(xiàn)Fragment類中定義的接口。
例如,下面Activity實現(xiàn)了上面示例中定義的接口:
[java]?view plaincopyprint?
public?static?class?MainActivity?extends?Activity??????????implements?HeadlinesFragment.OnHeadlineSelectedListener{??????...????????????public?void?onArticleSelected(int?position)?{??????????????????????}??}?? ?
把消息傳遞給另一個Fragment
?
? ? ? ? ?通過使用findFragmentById()方法捕獲Fragment實例,宿主Activity可以把消息發(fā)送給該Fragment,然后直接調(diào)用該Fragment的公共方法。
? ? ? ? 例如,上面的示例,Activty通過Interface的實現(xiàn)方法,傳遞數(shù)據(jù)到另一個Fragment。
?
[java]?view plaincopyprint?
public?static?class?MainActivity?extends?Activity??????????implements?HeadlinesFragment.OnHeadlineSelectedListener{??????...????????public?void?onArticleSelected(int?position)?{????????????????????????????ArticleFragment?articleFrag?=?(ArticleFragment)??????????????????getSupportFragmentManager().findFragmentById(R.id.article_fragment);????????????if?(articleFrag?!=?null)?{????????????????????????????????????????articleFrag.updateArticleView(position);??????????}?else?{????????????????????????????????????????ArticleFragment?newFragment?=?new?ArticleFragment();??????????????Bundle?args?=?new?Bundle();??????????????args.putInt(ArticleFragment.ARG_POSITION,?position);??????????????newFragment.setArguments(args);????????????????????????FragmentTransaction?transaction?=?getSupportFragmentManager().beginTransaction();????????????????????????????????????????transaction.replace(R.id.fragment_container,?newFragment);??????????????transaction.addToBackStack(null);????????????????????????????transaction.commit();??????????}??????}??}?? Fragment中使用左右滑動菜單?中應用到了Fragment間的通信
?
參考:http://developer.android.com/training/basics/fragments/communicating.html
/**
* @author 張興業(yè)
* 郵箱:xy-zhang#163.com
* android開發(fā)進階群:241395671
*
*/
- 上一篇《Android 4游戲高級編程(第2版)》書評
- 下一篇Android UI開發(fā)第二十七篇——實現(xiàn)左右劃出菜單
轉(zhuǎn)載于:https://www.cnblogs.com/hudabing/p/4508236.html
總結(jié)
以上是生活随笔為你收集整理的Fragment间的通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。