[英]How to use Fragments in Android properly
我回答了一個問題:
因為我很難將整個概念包裹起來。 過去的Google I / O視頻也有所幫助,但我仍然沒有理由使用片段。 我再次遇到了我的問題,通過更多的搜索和Google I / O 2013視頻,我又遇到了另一個問題。 在開始賞金以獲得關於此主題的更專家意見之后,我被引導使用FrameLayouts,但在此I / O 13視頻中19:05進入視頻顯示<fragment>
。 有人可以澄清我的任何不滿或誤解嗎?
我使用<fragment>
還是<frameLayout>
? 如果你看看我原來的問題,知道我來自哪里,可以獲得獎勵積分。
我在這里看到兩個單獨的問題; (1)什么是<fragment>
元素? (2)我(意思是你)通過使用FrameLayout
以最好的方式做我在上一個問題中嘗試做的事情嗎?
我會盡力回答這兩個問題。
<fragment>
XML標簽只是實現片段的另一種方式。 作為復習, Fragment
就像是活動的一部分。 然而,它是一個獨立的類,回顧片段文檔 ,因為Fragment
是模塊化的,所有片段必須存放在單獨的FragmentActivity
。 將此視為FragmentActivity
作為容器。 通過將Fragment
加載到FragmentActivity
, FragmentActivity
提供了Fragment
類本身無法訪問的其他有價值的函數。 它還為您提供動態交換片段的機會,從而提供更靈活的用戶體驗。
如何將Fragment
加載到其包含的FragmentActivity
取決於您要嘗試的內容。 一種方法是使用<fragment>
標簽。 使用這種方法,不是像在前面的問題中那樣在活動java代碼中聲明Fragment
然后使用FragmentTransaction
加載它,而是通過包含FragmentActivity
的XML布局加載Fragment
類。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
您可以在Android文檔中看到示例中聲明的片段。 然后,當onCreate
調用setContentView()
時, FragmentActivty
由FragmentActivty
加載。
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
顯示片段的另一種方式就像您在前面的示例中所做的那樣。 使用FragmentManager
您可以創建Fragment
類的新實例,並在java代碼中以編程方式加載它。
那么哪種技術有意義呢? 作為android docs demonstraits的例子,當你使用固定片段時,XML片段方法是有意義的,即你不是動態地交換片段。 這是因為您無法像在java代碼中那樣編輯動態創建的XML布局。 另外,從我所知道的,使用XML方法將片段更像是用於不同控制的布局元素。 在android示例中,他們使用XML方法在平板電腦上並排顯示2個fragmens。 通過控制片段更像布局元素,例如具有調整layout_weight
的能力,您可以為此目的獲得更好的結果。
但是,如果您正在設計一個高度動態的用戶體驗,例如使用ViewPager
或其他一些片段將定期輪換的功能,那么使用單獨的Fragment
類並在必要時替換這些Fragments
更有意義。
基於您之前的問題以及動態交換片段的需要,我認為您為該實現做出了正確的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.