Android - 我需要一些片段與活動和意見的澄清


在Android API 11+中,Google發布了一個名為Fragment的新類。

在視頻中,Google建議盡可能( link1link2 ),我們應該使用片段而不是活動,但是他們沒有解釋為什麼。

碎片的目的和它們的一些可能的用途(除了一些簡單的視圖/佈局可以輕易實現的UI示例之外)?

我的問題是關於碎片:

  1. 什麼是使用片段的目的?
  2. 與使用活動/視圖/佈局相比,使用片段有哪些優缺點?

獎金問題:

  1. 你能給一些非常有趣的碎片使用嗎? 谷歌沒有在他們的視頻中提到的東西?
  2. 在片段和包含它們的活動之間進行通信的最佳方式是什麼?
  3. 使用碎片時要記住什麼是最重要的事情? 任何提示和警告從您的經驗?


Answers



#1&#2使用片段的目的是什麼?與使用activities / views / layouts相比,使用片段有哪些優缺點?

碎片是Android的解決方案來創建可重用的用戶界面。 您可以使用活動和佈局來實現一些相同的功能(例如使用includes)。 然而; 片段連接到HoneyComb的Android API上。 讓我詳細說一下。

  • ActionBar 。 如果您希望在那裡導航您的應用程序,您很快會看到ActionBar.TabListener接口為您提供了一個FragmentTransaction作為onTabSelected方法的輸入參數。 你可以忽略這一點,做一些其他的事情,但是你會對付API,而不是使用它。

  • FragmentManager以一種非常聰明的方式處理«返回»。 返回並不意味著回到最後的活動,就像常規活動一樣。 這意味著回到以前的片段狀態。

  • 您可以使用帶有FragmentPagerAdapter的酷炫ViewPager來創建滑動界面。 FragmentPagerAdapter代碼比常規的適配器清晰得多,它控制著單個片段的實例化。

  • 如果您在嘗試為手機和平板電腦創建應用程序時使用分段,您的生活將會變得更加輕鬆。 由於碎片與Honeycomb + API緊密相連,因此您也可以在手機上使用它們以重用代碼。 這就是兼容性庫派上用場的地方。

  • 你甚至可以也應該使用片段的手機應用程序只。 如果你有可移植性的話。 我使用ActionBarSherlock和兼容性庫來創建“ICS外觀”應用程序,這些應用程序看起來與1.6版相同。 你得到最新的功能,如ActionBar ,標籤,溢出,拆分操作欄,viewpager等

獎金2

片段之間溝通的最佳方式是意圖。 當你按Fragment中的某些東西時,通常會調用StartActivity()和其上的數據。 意圖被傳遞到您啟動的活動的所有片段。




  1. 片段是一個活動的一部分,它為該活動貢獻了自己的用戶界面。 片段可以被認為是一個子活動。 與用戶交互的完整屏幕稱為活動。 一個活動可以包含多個片段。片段大多是活動的一個子部分。

  2. 根據屏幕大小,一個活動可能包含0或多個片段。 一個片段可以在多個活動中重用,所以它在活動中就像一個可重用的組件。

  3. 一個片段不能獨立存在。 它應該永遠是活動的一部分。 活動可以以任何片段存在。




不知道你指的是什麼視頻,但是我懷疑他們說你應該使用片段而不是活動,因為它們不能直接互換。 開髮指南中實際上有一個相當詳細的條目 ,請仔細閱讀。

簡而言之,片段生活在活動中,每個活動可以容納許多片段。 像活動一樣,它們有一個特定的生命週期,與活動不同,它們不是頂級的應用程序組件。 片段的優點包括代碼重用和模塊化(例如,在許多活動中使用相同的列表視圖),包括構建多窗格界面(主要用於平板電腦)的能力。 主要缺點是(一些)增加了複雜性。 一般來說,您可以通過(自定義)視圖以非標準和較差的方式實現相同的功能。




片段是一個應用程序的用戶界面或行為,可放置在一個活動,使更多的模塊化的活動設計的一塊。 如果我們說一個片段是一種子活動,那不會是錯的。

以下是有關片段的重要觀點:

  1. 片段擁有自己的佈局和自己的行為,並擁有自己的生命週期回調。

  2. 活動正在運行時,您可以在活動中添加或移除碎片。

  3. 您可以在單個活動中合併多個片段以構建多窗格用戶界面。

  4. 一個片段可以用於多個活動。

  5. 片段生命週期與其宿主活動的生命週期密切相關。

  6. 當活動暫停時,活動中可用的所有片段也將停止。

  7. 片段可以實現沒有用戶界面組件的行為。

  8. Android 3 (Honeycomb)中使用API​​版本11將碎片添加到Android API中。

欲了解更多詳情,請訪問官方網站Fragments




這是我在碎片上找到的重要信息:

從歷史上看,Android應用程序中的每個屏幕都是作為單獨的Activity來實現的。 這會在屏幕之間傳遞信息時產生一個挑戰,因為Android Intent機制不允許在活動之間直接傳遞引用類型(即對象)。 相反,對象必須是序列化的或全球可訪問的引用可用。

通過使每個屏幕成為一個單獨的片段,這個數據傳遞頭痛是完全避免的。 片段始終存在於給定的活動的上下文中,並且始終可以訪問該活動。 通過在Activity中存儲感興趣的信息,每個屏幕的片段可以簡單地通過Activity訪問對象引用。




碎片在某些情況下特別有用,例如我們想在所有頁面中保留導航抽屜的地方。 您可以使用任何您想要的片段膨脹框架佈局,並仍然可以訪問導航抽屜。

如果你使用過一個活動,你將不得不把抽屜放在所有的冗餘代碼的活動中。 這是片段的一個有趣的用法。

我是Android新手,仍然認為一個片段是有幫助的。




我知道這已經被討論過了,但是我想補充一點:

  • 碎片可以用來填充Menu並可以處理自己的MenuItem點擊。 從而為您的活動提供更多的調製選項。 你可以做ContextualActionBar的東西等沒有你的活動知道它,並可以從基本的東西你的活動處理(導航/設置/關於)基本解耦。

  • 有Frags的父Frag可以給你更多的選項來模塊化你的組件。 例如,您可以輕鬆地將Frags換掉,將新的Frags放在尋呼機中或將其移除,重新排列它們。 所有沒有你的活動知道任何關於它只是集中在更高層次的東西。




一個片段存在於一個活動中。

活動本身就是活的。




生活在活動中的碎片有:

  • 它自己的生命週期
  • 它自己的佈局
  • 自己的孩子碎片等

把碎片看作是它所屬的主要活動的一個子活動,它不能獨立存在,它可以一次又一次地被調用/重用。 希望這可以幫助 :)




1.使用片段的目的是什麼?

  • 答:
    1. 處理設備外形差異。
    2. 在應用程序屏幕之間傳遞信息。
    3. 用戶界面組織。
    4. 高級用戶界面隱喻。