2013-05-21 26 views
1

我問一個問題,而回:因爲我有一個非常艱難的時刻纏繞我的頭周圍的整個概念如何在Android上使用碎片正確

Replacing Fragments isn't working/Am I executing this the proper way?

。過去的Google I/O視頻也有幫助,但我仍然沒有真正有理由使用片段。我再次遇到了我的問題,並且通過搜索和Google I/O 2013視頻的更多搜索,我已經在路上遇到了另一個問題。在開始賞金以獲得關於此主題的更多專家意見之後,我被引導使用FrameLayouts,但是在19:05的這個I/O 13視頻到video中,它顯示了<fragment>。有人可以澄清我的任何差異或誤解嗎?

我使用<fragment>還是<frameLayout>?如果你看我的原始問題,知道我來自哪裏,可以獲得獎勵積分。

+0

'FrameLayout'與片段無關,它只有一個孩子的viewgroup。你看到的例子可能使用了一個'FrameLayout'作爲一個片段的容器,後面可能會被另一個替換掉。 – tbruyelle

回答

4

我在這裏看到有兩個單獨的問題; (1)什麼是<fragment>元素? (2)我是否(意思是你)通過使用FrameLayout以儘可能最好的方式做我在上一個問題中試圖做的事情?

我會盡力回答兩者。

<fragment> XML標籤是實現片段的另一種方式。作爲進修人員,Fragment就像是一項活動的一部分。這是一個獨立的課程,但是,回到fragment documentation,因爲Fragment旨在模塊化,所有片段必須安置在一個單獨的FragmentActivity內。把它看作是一個容器FragmentActivity。通過將Fragment加載到FragmentActivity中,FragmentActivity提供了Fragment類自己無法訪問的其他有價值的功能。它還爲您提供動態換取片段的機會,從而提供更靈活的用戶體驗。

如何將Fragment載入其包含的FragmentActivity取決於您試圖創建的內容。一種方法是使用<fragment>標籤。通過這種方法,不像在先前的問題中那樣在活動java代碼中聲明Fragment,然後使用FragmentTransaction加載它,則Fragment類將通過包含FragmentActivity的XML佈局加載。

<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 docs中找到的示例中看到這裏聲明的片段。當setContentView()被調用onCreate時,片段被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演示的例子,當您使用固定片段時,XML片段方法很有意義,即您不會動態交換片段。這是因爲您不能像編寫Java代碼一樣編輯您在動態創建的XML佈局。另外,從我所知道的情況來看,使用XML方法將片段更像是佈局元素,以適應不同的控制。在android示例中,他們使用XML方法在平板電腦上並排顯示2個fragmens。通過更像佈局元素來控制片段,例如有能力調整layout_weight您可以達到更好的結果。

但是,如果你在設計一個高度動態的UX,說有ViewPager或其他一些特徵,其中片段將被定期輪換,更有意義使用單獨Fragment類和替換那些Fragments,因爲他們成爲必要。

根據你以前的問題和需要動態地交換片段,我認爲你爲該實現做出了正確的選擇。