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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

android fragment activity 交互,Android基础之Fragment与Activity交互详解

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android fragment activity 交互,Android基础之Fragment与Activity交互详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天繼續講解Fragment組件的特性,主要是跟Activity的交互和生命周期的關系,我們前面已經說過Fragment是依賴于Activity的,而且生命周期也跟Activity綁定一起。下面我們看看Fragment跟Activity的關系。

1、為Activity創建事件回調方法在一些情況下, 你可能需要一個fragment與activity分享事件。 一個好的方法是在fragment中定義一個回調的interface, 并要求宿主activity實現它。當activity通過interface接收到一個回調, 必要時它可以和在layout中的其他fragment分享信息。例如, 如果一個新的應用在activity中有2個fragment – 一個用來顯示文章列表(framgent A), 另一個顯示文章內容(fragment B) – 然后 framgent A必須告訴activity何時一個list item被選中,然后它可以告訴fragmentB去顯示文章。

在這個例子中, OnArticleSelectedListener 接口在fragment A中聲明:

public static class FragmentA extends ListFragment

{

//...

// Container Activity must implement this interface

public interface OnArticleSelectedListener {

public void onArticleSelected(Uri articleUri);

}

//...

}

然后fragment的宿主activity實現 OnArticleSelectedListener 接口,并覆寫 onArticleSelected() 來通知fragment B,從fragment A到來的事件。為了確保宿主activity實現這個接口, fragment A的 onAttach() 回調方法(當添加fragment到activity時由系統調用) 通過將作為參數傳入onAttach()的Activity做類型轉換來實例化一個OnArticleSelectedListener實例。

public static class FragmentA extends ListFragment

{

OnArticleSelectedListener mListener;

//...

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

try {

mListener = (OnArticleSelectedListener) activity;

} catch (ClassCastException e) {

throw new ClassCastException(activity.toString() + " must implementOnArticleSelectedListener");

}

}

//...

}

如果activity沒有實現接口,fragment會拋出 ClassCastException 異常。正常情形下,mListener成員會保持一個到activity的OnArticleSelectedListener實現的引用,因此fragment A可以通過調用在OnArticleSelectedListener接口中定義的方法分享事件給activity。例如,如果fragment A是一個 ListFragment的子類, 每次用戶點擊一個列表項,系統調用在fragment中的onListItemClick(),然后后者調用 onArticleSelected() 來分配事件給activity。

public static class FragmentA extends ListFragment

{

OnArticleSelectedListener mListener;

//...

@Override

public void onListItemClick(ListView l, View v, int position, long id) {

// Append the clicked item's row ID with the content provider Uri

Uri noteUri =ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);

// Send the event and Uri to the host activity

mListener.onArticleSelected(noteUri);

//...

}

傳給 onListItemClick() 的 id 參數是被點擊的項的行ID,activity(或其他fragment)用來從應用的 ContentProvider 獲取文章。

2、添加項目到ActionBar你的fragment可以通過實現 onCreateOptionMenu() 提供菜單項給activity的選項菜單(以此類推, Action Bar也一樣)。為了使這個方法接收調用,無論如何,你必須在 onCreate() 期間調用 setHasOptionsMenu() 來指出fragment愿意添加item到選項菜單(否則, fragment將接收不到對 onCreateOptionsMenu()的調用)。

隨后從fragment添加到Option菜單的任何項,都會被追加到現有菜單項的后面。當一個菜單項被選擇,fragment也會接收到 對 onOptionsItemSelected() 的回調。也可以在你的fragment layout中通過調用registerForContextMenu() 注冊一個view來提供一個環境菜單。當用戶打開環境菜單,fragment接收到一個對 onCreateContextMenu() 的調用.當用戶選擇一個項目, fragment接收到一個對onContextItemSelected() 的調用。

注意: 盡管你的fragment會接收到它所添加的每一個菜單項被選擇后的回調,但實際上當用戶選擇一個菜單項時,activity會首先接收到對應的回調。如果activity的on-item-selected回調函數實現并沒有處理被選中的項目,然后事件才會被傳遞到fragment的回調。

這個規則適用于選項菜單和環境菜單。

3、處理fragment的生命周期管理fragment的生命周期, 大多數地方和管理activity生命周期很像.和activity一樣, fragment可以處于3種狀態:

Resumed??????? 在運行中的activity中fragment可見。

Paused??????? 另一個activity處于前臺并擁有焦點,但是這個fragment所在的activity仍然可見(前臺activity局部透明或者沒有覆蓋整個屏幕)。

Stopped??????? 要么是宿主activity已經被停止, 要么是fragment從activity被移除但被添加到后臺堆棧中。

停止狀態的fragment仍然活著(所有狀態和成員信息被系統保持著)。然而,它對用戶不再可見,并且如果activity被干掉,他也會被干掉。

其對應關系圖如下:

和activity一樣, 你可以使用Bundle保持fragment的狀態,萬一activity的進程被干掉,并且當activity被重新創建的時候, 你需要恢復fragment的狀態時就可以用到. 你可以在fragment的 onSaveInstanceState() 期間保存狀態,并可以在 onCreate(),onCreateView() 或 onActivityCreated() 期間恢復它。

生命周期方面activity和fragment之間最重要的區別是各自如何在它的后臺堆棧中儲存。 在默認情況下,activity在停止后,它會被放到一個由系統管理的用于保存activity的后臺堆棧。(因此用戶可以使用BACK按鍵導航回退到它)。

然而,僅當你在一個事務期間移除fragment時,顯式調用addToBackStack()請求保存實例時,才被放到一個由宿主activity管理的后臺堆棧。

另外,管理fragment的生命周期和管理activity生命周期非常類似。因此, "managing the activitylifecycle"中的相同實踐也同樣適用于fragment。你需要理解的是,activity的生命如何影響fragment的生命。

4、與activity生命周期的協調工作fragment所生存的activity的生命周期,直接影響fragment的生命周期,每一個activity的生命周期的回調行為都會引起每一個fragment中類似的回調。

例如,當activity接收到onPause()時,activity中的每一個fragment都會接收到onPause()。

Fragment 有一些額外的生命周期回調方法,那些是處理與activity的唯一的交互,為了執行例如創建和銷毀fragment的UI的動作。這些額外的回調方法是:

?onAttach()

當fragment被綁定到activity時被調用(Activity會被傳入)

?onCreateView()

創建和fragment關聯的view hierarchy時調用

?onActivityCreated()

當activity的onCreate()方法返回時被調用

?onDestroyView()

當和fragment關聯的view hierarchy正在被移除時調用

?onDetach()

當fragment從activity解除關聯時被調用

fragment生命周期的流程,以及宿主activity對它的影響,在圖3中顯示。在這個圖中,可以看到activity依次的每個狀態是如何決定fragment可能接收到的回調方法。例如,當activity接收到它的onCreate(),activity中的fragment接收到最多是onActivityCreated()。

一旦activity到達了resumed狀態,你可以自由地在activity添加和移除fragment。因此,僅當activity處于resumed狀態時, fragment的生命周期才可以獨立變化。

無論如何,當activity離開resumed狀態,fragment再次被activity的推入它自己的生命周期過程。

5、總結Fragment的相關知識暫時就講到這里,例子Demo可以直接看APIDEMO里面的程序,如果不知道API Demo在哪里,請百度!學編程需要自己學會找答案。

總結

以上是生活随笔為你收集整理的android fragment activity 交互,Android基础之Fragment与Activity交互详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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