2011-12-21 61 views
94

我知道爲什麼要使用片段,Android開發人員網站很好地解釋了這一點。但在大多數情況下,我希望平板電腦上的不同部分具有自己的特殊行爲和UI,但我不知道片段如何提供幫助。在大多數情況下,我認爲創建2個不同的活動(1個用於平板電腦,1個用於手機)並且在第三類中共享常見行爲和事件會更快。 因此記住這一點爲什麼我應該使用片段?什麼時候應該在Android應用程序中使用片段?爲什麼要使用碎片?

回答

69

片段是更大的失業保險金在我看來。用戶有時在同一屏幕上看到兩個不同類別的兩個不同視圖很方便。如果在創造性的時刻,你決定用例如佔用一半屏幕的listView和佔用另一半的webView來顯示你的應用程序是很好的 - 這樣當你點擊一個列表項時片段A它將意圖傳遞給片段B中的webView,並突然看到您剛剛單擊而沒有進行應用程序切換活動 - 然後您可以使用片段。這只是我從頭到尾想出的一個例子。

底線:碎片是兩個或更多同時在屏幕上的活動。

+61

爲什麼在使用不同的父級佈局和不同的類時可以使用片段?更容易有兩個父級佈局,一個用於列表,另一個用於webview。我個人認爲你的答案是不正確的,因爲你只說明瞭什麼是片段,而不是你爲什麼要用它來代替主持兩個班級的活動。事實上,有一個活動和主持兩個類更容易,因爲你不需要處理intents和parcelable接口來序列化你想要傳遞的對象。你可以直接訪問課程 – jonney 2013-05-02 16:57:30

+0

因此,建議將片段用於在多個活動中可見的搜索表單? – Muatik 2014-08-15 08:35:34

+0

OMG因此,當我點擊某些東西時,某些應用程序現在如何將新的「視圖」滑動到視圖中?所以要使用一個片段,我們是否只有(例如)一個主佈局文件,然後在該文件中使用'',無論我們想要包含片段?也許如果我們不想讓片段始終在那裏隱藏它​​並在需要時顯示它或在需要時注入它? – username 2015-12-26 06:38:31

14

Google建議您始終使用分段。

爲什麼?原因很簡單:

在最簡單的情況下,片段被用作類似的活動容器。

爲什麼你需要這個?再一次,這很簡單。

Android 4(ICS)支持智能手機和平板電腦。這意味着SAME應用程序將運行在智能手機和平板電腦上,並且它們可能會非常不同。

片中有大屏幕,這將是空的或不使用 - 除非你正確地分配它。

這指─像聯繫人列表和聯繫信息一個活動把兩個片段。

的smatphone將顯示的聯繫人列表,並在觸摸顯示聯繫人的信息。

在平板電腦上,用戶仍然可以看到列表和信息會在它旁邊。

2個片段 - 在一個屏幕上......

智能?是...應該是下降到了Android 1.6兼容回......


######################## #####################################

OK,已經知道了?然後 - 只是試圖瞭解案件解決:

許多事情的工作方式 - 列表&細節,菜單和子菜單,信息,詳細信息和一些更詳細的信息。 你想要一種方式來保持它的自然和平滑的平板電腦,你期望這樣preform,但不能指望智能手機顯示它像平板電腦一樣...

得到它?

欲瞭解更多信息,請this. 我真的覺得你只需要抓住概念....

+0

是概念clear..But在簡單的界面,其中不同的活動沒有直接的關係,每一個活動是一個簡單數據容器......碎片真的有必要嗎?我能避免嗎?從另一個角度來看,程序應該適合在不同的屏幕上運行,而不管你是否使用片段。 – 2011-12-22 10:10:18

+1

你是對的,你不需要片段來支持多種屏幕尺寸。但他們應該更容易。您應該可以將完全相同的片段實例化爲手機上的整個屏幕活動,或者作爲平板電腦上的部分屏幕,只需幾行代碼就可以說明差異。另外,因爲片段處理他們自己的一些生命週期,所以你不必擔心。 – Sparky 2012-03-22 23:58:51

+1

「Google建議你總是使用片段。」?我不同意。就我個人而言,我認爲它只有在設備根據其大小設計點呈現一個窗格或兩個窗格視圖時纔有用。 – user1914692 2013-08-08 00:44:41

55

使用片段時,好處我看到的是:邏輯的

  • 封裝。
  • 更好地處理片段的生命週期。
  • 可在其他活動中重複使用。

缺點我看到的是:

  • 更多代碼(例如,實例化的片段管理器,加入片段事務,寫該片段的回調)
  • 片段之間的通信和活動比較困難。正如@jonney所說的那樣,你需要處理一個parcelable接口來序列化你想要傳遞的對象。

因此,決定使用一個片段的時候,我都會問自己以下幾個問題:

  • 是片段的從活動的生命週期不同的生命週期?

如果生命週期不同,可以使用片段更好地處理生命週期。例如,如果你想破壞片段,但不是活動。如果你有pager adapter,情況就是這樣。

  • 片段是否會用於多個活動?

如果您使用片段,則用戶輸入事件將是可重用的。

  • 片段與活動之間的通信量很小嗎?

如果您需要將大對象傳遞給片段,則需要處理序列化它們的代碼。另外,如果您需要在片段和活動之間進行通信,則可能需要實現接口。這在大多數情況下增加了代碼庫的複雜性。這不是差異製造者,而是考慮的標準。

+0

這不僅僅是一個編程問題。我只是認爲做一個應用程序不僅僅是寫源代碼,還要處理與手機問題不同的平板電腦的一些用戶界面問題,說實話,我真的不太喜歡碎片應該解決的問題屏幕尺寸之間的差距。做一個應用程序真的不是要填補一些冗餘的空白空間。即使從編程的角度來看,如果我的部件有麻煩來溝通另一個我更喜歡用普通的東西創建一個網關類,而不是與弱管道掙扎。關於這句話的 – 2013-12-15 00:47:32

+0

「片段的生命週期是否與活動的生命週期不同?」。我有很多情況下,這個視圖是一個單獨的視圖組,具有相同的生命週期。但是我使用了片段,因爲我想在多個地方使用它,並且同時我需要了解生命週期,並根據這一點制定一些邏輯。而如果我使用viewgroup我需要通知視圖組關於手動調用一些自定義onResume方法的活動的生命週期。 – 2017-07-23 07:57:25

8

專家會告訴你:「當我看到UI時,我會知道是使用Activity還是使用Fragment」。在開始時這是沒有任何意義的,但是到時候,你實際上可以分辨出是否需要Fragment

有一個很好的做法,我發現對我很有幫助。當我試圖向女兒解釋一些事情時,我想到了這一點。

即是想象一個代表屏幕的盒子。你可以在這個盒子裏加載另一個屏幕嗎?如果你使用一個新盒子,你是否需要複製第一盒子中的多個項目?如果答案是肯定的,那麼你應該使用片段,因爲根Activity可以容納所有重複的元素,以節省你創建它們的時間,並且你可以簡單地替換部分方塊。

別忘了你總是需要一個盒子容器(Activity)或者你的零件會散開。所以一個箱子裏面有零件。

小心不要誤用包裝盒。 Android UX專家建議(您可以在YouTube上找到它們),我們應該明確加載另一個Activity,而不是使用片段(就像我們處理具有類別的導航抽屜時一樣)。一旦您對Fragments感到滿意,您可以觀看所有視頻。甚至更多,他們是強制性材料。

你現在可以看看你的用戶界面,並找出你是否需要ActivityFragment?你有沒有獲得新的視角?我認爲你做到了。 :)

+1

這是從[this](http://stackoverflow.com/a/25993052/2057291)主題複製而來的。同一位作者,同一天,僅差幾分鐘。 – tommus 2016-07-05 21:55:53

4

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

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

https://softwareengineering.stackexchange.com/questions/244771/why-use-android-fragments

0

片段的主要支持更加動態的&大UI等Tablet.Because平板屏屏幕比正常聽筒大得多。有更多的空間來結合&交換UI組件。

片段允許這樣的設計,而無需在層次結構中進行如此複雜的更改。

通過片段分裂活動佈局,成爲我們能夠在運行時修改活動的外觀

相關問題