2014-07-16 31 views
0

最近我一直在閱讀關於片段的內容,幾乎所有人都說我們應該使用它。我仍然無法很好地理解這個概念。我已閱讀this,但我仍然有一些問題。Views and Fragments

第一:一個片段必須與某個活動相關聯(如果其正確的話),比如說MainActivity,片段有自己的佈局,MainActivity有它自己的兩個。那麼屏幕上會顯示什麼?片段佈局或MainActivity或Both?

第二:如果我想將現有代碼轉換爲使用片段,那麼主要更改是什麼?

第三:如果我想有一個以上的片斷,我必須補充一點,延長Fragment因爲我要創建的每個片段的類?

Forth:onCreateView擴展Fragment的類返回一個視圖,在它內部創建一個視圖並將其返回給主活動以將其添加到它的佈局是否正確?

任何幫助表示讚賞。

回答

1

以下是有關的片段一些提示,到目前爲止我所瞭解,它可以幫助你瞭解片段:

1:關於你的第一個問題,是雙方(活動和片段)都有自己的佈局,但活動佈局充當碎片的基礎佈局,但這也取決於您正在工作的佈局。如果我聲明一個簡單的HelloWorld應用程序示例(當您在eclipse中更新的adt中首次創建項目時自動創建),那麼您會看到Activity作爲基礎和片段佈局顯示在其上。

2:如果你想改變現有的代碼來使用片段,首先它取決於你的代碼的複雜性,之後你必須改變各種東西,如果你支持的api級別10和以下比你有要使用額外的庫。有很多要做的改變,但這些都取決於你的要求。

3:是必須創建延伸片段或片段的任何其他子類的類。這個類就像你的Activity類一樣,你有一個xml佈局可以使用。

4:是的,你必須定義裏面OnCreateView視圖(),使其返回到活動添加到其佈局或顯示的用戶界面。

片段就像活動一樣,當你使用嵌套片段時,就會產生痛苦。並且片段的生命週期與Activity不同。

注意:請告訴我,如果您有其他疑問或有任何疑問關於上述書面陳述。

+0

MainActivity有其自己的佈局和片段,所以當我添加片段時,屏幕上顯示的是什麼?片段的佈局或MainActivity的佈局? – Alaa

+1

@Alaa - 如果在Activity中添加片段(包含某些視圖),則屏幕上將顯示片段佈局。 – Manish

1

第一:

MainActivity佈局可以嵌入多個片段佈局。您甚至可以在任何其他活動中重複使用這些片段佈局。啊,好功能!

二:

如果我想將現有的代碼中使用片段,有什麼 主要變化?

要你只需要對現有的代碼中使用片段,

片段將使用<fragment>元素的佈局被添加到活動中或可以動態增加。

要檢查是否片段已經是佈局的一部分,你可以使用FragmentManager類 -

DetailFragment fragment = (DetailFragment) getFragmentManager(). 
    findFragmentById(R.id.detail_frag); 
if (fragment==null || ! fragment.isInLayout()) { 
    // start new Activity 
    } 
else { 
    fragment.update(...); 
} 

如果一個片段是在XML佈局文件中定義的,android:name屬性指向對應的類。

要動態地將碎片添加到現有佈局,您通常需要在添加碎片的XML佈局文件中定義一個容器。

爲此,您可以使用例如FrameLayout元素。

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.your_placehodler, new YourFragment()); 
ft.commit(); 

新的Fragment將替換之前添加到容器中的現有片段。

如果您想將交易添加到Android的backstack,請使用addToBackStack()方法。

這會將操作添加到活動的歷史堆棧中,即,這將允許通過後退按鈕還原碎片更改。

三:

如果我想有一個以上的片斷,我一定要加個班 擴展片段,因爲我要創建的每個片段?

要定義一個新片段你要麼擴展android.app.Fragment類或其子類之一, 例如,ListFragmentDialogFragmentPreferenceFragmentWebViewFragment或。

第四:擴展片段返回一個視圖類的

onCreateView,是 正確創建裏面一個視圖,並返回它的主要活動 將其添加到它的佈局? ?

無需將其返回到主活動以將其添加到其佈局。只需在Main Activity之後使用FragmentTransaction's replace,然後按commit即可完成。

+0

感謝您的解釋,但我有一些問題,1.什麼是容器? 2.你在你的答案中說,需要返回視圖,這是否意味着我在片段類中創建的任何視圖都會在片段添加後顯示? – Alaa

+1

@Alaa - (1)容器在佈局xml中定義。它有它的'id',這樣在活動中你只需要用你的分片替換'id'並提交事務。所以你用一些碎片替換容器。你可以在你的應用程序的任何視圖中使用你想要的任何片段進行替換。您可能在單一佈局中有多個容器,並且可以用一些片段替換所有容器,從而製作多窗格UI。 (2)是的,你創建了可以保存某些視圖的片段。然後在活動中添加該片段以在UI上顯示。 –