日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]使用fragments

發(fā)布時間:2025/3/21 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]使用fragments 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原帖:http://wiki.eoe.cn/page/Fragments.html

一個**碎片**在一個活動中代表一個行為或用戶界面的一部分。 你可以在一個單一的活動中組合使用多個碎片以建立一個多窗格的UI,并且可以在多個活動中重用一個碎片。你可以認(rèn)為是一個擁有獨立生命周期、能夠獨立接受輸入事件、并且可以在活動運行時添加或移除的碎片作為一個活動的模塊化部分(有點像一個你可以在不同活動中重用的子活動)。

在一個Activity中,一個Fragment代表一個用戶接口的行為或者部分行為.你可以把幾個Fragment混合到一個Activity中,這樣你就可以創(chuàng)建一個多個頁面的UI并可以在多個Activity中復(fù)用一個Fragment.

一個碎片必須總是嵌入到一個活動(activity)中,并且它的生命周期直接受到住活動得生命周期的影響。例如:當(dāng)活動暫停或銷毀時時,它里邊的所有碎片也是如此。然而,當(dāng)一個活動運行時,(它在 resumed(重新開始)**生命周期狀態(tài)**,你可以單獨的操作每個碎片,例如添加或移除它們。當(dāng)你執(zhí)行了這樣的碎片事務(wù),你也可以將它添加到一個后臺堆棧所管理的活動——該活動中的每個后臺堆棧條目都記錄著已發(fā)生的片段事務(wù)。后臺堆棧允許用戶通過按返回按鈕退一個碎片事務(wù)(向后導(dǎo)航)。

當(dāng)你增加一個Fragment來作為Activity界面布局的一部分時,他存在在Activity視圖層里面的一個ViewGroup中,這個Fragment定義了自己的視圖.你可以通過在Activity的布局文件中用聲明這個fragment來把這個fragment插入你的activity中,或者你可以在應(yīng)用的代碼中把他添加添加到一個現(xiàn)存的ViewGroup中.然而,Fragment不必是一個activity布局的一部分,你可以使用一個Fragment而不實用他的UI,這樣可以讓Fragment作為Activity的一個不可見部分來工作.

這個文檔介紹了增加使用Fragment創(chuàng)建你的應(yīng)用,包括怎樣使fragment在增加到返回棧的時候保持他們的狀態(tài),和activity以及該activity的其他fragment的共享事件,組成Activity的ActionBar,等等.

Design Philosophy-設(shè)計理念?


Android在Android3.0(API等級11)中引入了Fragment,主要是為了在大屏幕上(比如平板)支持更多動態(tài)的靈活的UI設(shè)計.因為平板的屏幕比其他手持設(shè)備大多了,有更多的空間來組合,交換UI組件.Fragment使你在View層不必進(jìn)行很復(fù)雜變化就可以就可以實現(xiàn)這些設(shè)計.通過把Activity的布局分解成很多Fragment,你可以在運行時改動activity的界面并且可以把這些變化保存在activity管理的返回棧中.

比如,一個新聞應(yīng)用可以使用一個Fragment在左邊顯示一列文章標(biāo)題而在左邊的另一個Fragment顯示文章詳細(xì)內(nèi)容.這兩個Fragment都在同一個Activity中,他們并排著,每個Fragment有他自己的生命周期回調(diào)方法,處理他們各自的輸入事件.那么,不需要在一個activity中選擇在另一個activity中閱讀,用戶可以選擇一篇文章在同一個activity中閱讀這個新聞的內(nèi)容.如圖1所示:

你應(yīng)該把fragment設(shè)計成模塊化的,可復(fù)用的Activity組件.就是說,每個Fragment定義了他自己的布局和他自己的,擁有自己生命周期回調(diào)的行為,你可以在多個activity中包含一個Fragment,所以你應(yīng)該把Fragment設(shè)計成可以復(fù)用的,并且需要避免從一個fragment直接操縱另一個fragment.這一點是非常重要的因為一個fragment模塊允許你針對不同的屏幕尺寸變化你的fragment組合形式.在設(shè)計應(yīng)用來支持平板和手持設(shè)備時,你可以在不同的布局配置中重用你的fragment來針對屏幕空間優(yōu)化用戶體驗.比如,在一個手持設(shè)備上,可能需要分開的fragment來提供一個單獨窗口UI而不是使很多fragment在同一個activity中放不開.

圖例1 平板上,在一個activity中Fragment怎么定義兩個UI模塊,但是在手持設(shè)備上他們將分開.

繼續(xù)以上面的新聞為例,當(dāng)在平板大小的設(shè)備上運行的時候,這個應(yīng)用可以在Activity中嵌入兩個Fragment.然而,在手持設(shè)備上的時候,由于沒有足夠的空間盛放這兩個fragment,所以ActivityA只顯示了其中的一個Fragment(新聞列表),當(dāng)用戶選擇新聞標(biāo)題的時候,他跳轉(zhuǎn)到ActvityB,ActivityB中顯示第二個Fragment(新聞詳細(xì)信息).那么通過復(fù)用不同組合的Fragment這個應(yīng)用就可以同時支持平板和手持設(shè)備了,如圖1.

更多關(guān)于使用不同的Fragment組合來設(shè)計適應(yīng)不同屏幕應(yīng)用的信息,請參閱Supporting Tablets and Handsets一章.

Creating a Fragment-創(chuàng)建一個Fragment


創(chuàng)建一個Fragment,你應(yīng)該創(chuàng)建一個Fragment的子類(或者他的一個現(xiàn)有子類).Fragment類的代碼很像Activity.它還有和activity相似的回調(diào)方法,比如onCreate(), onStart(), onPause(), 和 onStop().實際上,如果你在使用Fragment來轉(zhuǎn)換一個現(xiàn)成的應(yīng)用,你可能只是簡單的從你的activity回調(diào)方法中移動代碼到fragment相應(yīng)的回調(diào)方法中.

一般的,你至少應(yīng)該實現(xiàn)下面的生命周期方法:

  • onCreate()

    • 創(chuàng)建fragment的時候,系統(tǒng)會調(diào)用這個方法.在你實現(xiàn)過程中,當(dāng)fragment暫停(pause),停止(stop)然后恢復(fù)(resume)時,你應(yīng)該初始化你想要保持的,fragment的必要的組件.
  • onCreateView()

    • 在fragment第一次繪制他的用戶界面的時候系統(tǒng)會調(diào)用這個方法.如果你想為你的fragment繪制界面,你必須從這個方法中返回一個View,這個View是你fragment布局的基礎(chǔ).如果這個Fragment不提供UI,你可以返回空.
  • onPause()

    • 系統(tǒng)調(diào)用這個方法作為用戶離開這個fragment的第一標(biāo)志(雖然這不總是意味著這個Fragment被摧毀了).通常是你需要做一些改變,這些改變超出了當(dāng)前的用戶會話(因為用戶有可能不會回到這個界面來).

大多數(shù)應(yīng)用應(yīng)該至少為每個fragment實現(xiàn)上述的三個方法,但還有些回調(diào)函數(shù)你需要去實現(xiàn),用來處理fragment生命周期中的不同狀態(tài)。所有有關(guān)fragment生命周期的回調(diào)函數(shù)稍后將會在章節(jié)Handling the Fragment Lifecycle中討論

也有有些子類(不是基本的Fragment類)你可能想要繼承來實現(xiàn)Fragment:

  • DialogFragment

    • 顯示一個浮動的對話框.使用這個類來創(chuàng)建一個對話框是和使用對話Helper方法在Activity類中創(chuàng)建對話框都是很好的方法,因為你可以把Fragment對話框包含在activity管理的Fragment返回棧中,允許用戶返回到關(guān)閉的Fragment中.
  • ListFragment

    • 展示一列被adapter(比如SimpleCursorAdapter)管理的項,和ListActivity很相似.它提供了一些管理一個列表視圖的方法,比如處理點擊事件的onListItemClick()方法.
  • PreferenceFragment

    • 用一個列表來顯示一組偏好設(shè)置對象,類似于PreferenceActivity. 在創(chuàng)建設(shè)置型的activity時會用到.

圖2 Fragment的生命周期(Activity 正在運行時).

Adding a user interface-添加一個用戶接口

一個Fragment經(jīng)常被用作activity界面的一部分,為activity貢獻(xiàn)自己的界面.

為了給fragment提供一個布局,你必須實現(xiàn)onCreateView()方法,Android系統(tǒng)在Fragment繪制他的界面的時候調(diào)用這個方法.你對這個方法的實現(xiàn)必須返回一個View,這個View是你Fragment布局的基礎(chǔ).

注意:如果你的Fragment是一個ListFragment類的子類,默認(rèn)會從onCreateView()返回一個Listview,所以你不需要實現(xiàn)它.

?

為了從onCreateView()方法返回一個布局,你可以用一個xml布局文件來填充它.為了幫助你做這個事情,onCreateView() 方法提供了一個LayoutInflater對象.

比如,這個一個Fragment的子類,他是從example_fragment.xml文件載入的布局:

1 2 3 4 5 6 7 8 public static class ExampleFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.example_fragment, container, false);} }

Creating a layout-創(chuàng)建一個布局


和上面差不多,R.layout.example_fragment是在系統(tǒng)保存的example_fragment.xml這個布局資源的引用.更多關(guān)于使用一個xml文件創(chuàng)建一個布局的信息,參考User Interface 文檔.

傳遞給onCreateView()的容器參數(shù)是fragment鎖插入的activity的父ViewGroup(來自對應(yīng)的activity布局).savedInstanceState的參數(shù)是一個提供關(guān)于之前Fragment狀態(tài)數(shù)據(jù)的Bundle,如果這個Fragment被恢復(fù)了(resume,恢復(fù)數(shù)據(jù)在處理Fragment生命周期這一節(jié)有更多介紹)

inflate()方法接收三個參數(shù):

    • 你想要添加的layout的資源ID.
    • 將作為填充布局的父容器的ViewGroup.傳遞容器參數(shù)是非常重要的,只用這樣才能使系統(tǒng)應(yīng)用布局參數(shù)到填充視圖的根視圖,從而被它的父視圖所確定.
    • 一個boolean類型的參數(shù),用于在填充時指明填充的布局是否應(yīng)該附加在ViewGroup(第二個參數(shù))上.(如果系統(tǒng)已經(jīng)插入這個填充布局到容器了就返回false,如果將要在最終布局中創(chuàng)建一個多余的viewgroup,那就返回true)

現(xiàn)在你已經(jīng)知道如何創(chuàng)建一個有布局的fragment,接下來,你需要將fragment加到你的activity中

Adding a fragment to an activity-給一個Activity添加一個Fragment


一般的一個fragment提供了Activity UI的一部分,他作為Activity全局視圖層的一部分而嵌入.有兩種方法可以把fragment嵌入到Activity布局中:

  • * Declare the fragment inside the activity's layout file-在Activity布局文件中聲明Fragment.*

這樣的話,你可以把Fragment當(dāng)作一個視圖,比如,這是一個嵌入兩個Fragmet的Activity:

123456789 10 11 12 13 14 15 16 <?xml version"utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><fragment android:name="com.example.news.ArticleListFragment"android:id="@+id/list"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent" /><fragment android:name="com.example.news.ArticleReaderFragment"android:id="@+id/viewer"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent" /> </LinearLayout>

的android:name屬性指定了在布局中要實例化的Fragment類.

在系統(tǒng)創(chuàng)建這個Activity布局的時候,他會實例化每個布局中的每個fragment,調(diào)用每個fragment的onCreateView()方法來取回每個fragment的視圖.系統(tǒng)把fragment返回的視圖直接插入到標(biāo)簽所在的地方.

注意.每個fragment需要一個獨一無二的id以便系統(tǒng)可以在activity restartt時恢復(fù)fragment(你也可以用它來進(jìn)行fragment的事務(wù)處理,例如將它刪除)。有三種方法為一個fragment提供id

  • 使用android:id來指定它唯一的ID.

  • 使用android:tag來指定一個唯一的字符串標(biāo)志

  • 如果上面兩個你都不指定,系統(tǒng)會使用容器視圖的ID.

  • 或者,機(jī)械性的把fragment添加到ViewGroup中.

在任何你Activity運行的時候,你都可以把fragment添加到Activity的視圖中.你只需要指定一個用于盛放Fragment的ViewGroup.為了讓fragment可以被管理(比如添加,刪除,替換fragment),你必須使用來自FragmentTransaction的API.你可以像下面這樣在Activity中獲取一個FragmentTransaction的實例:

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

你可以使用Add()方法添加一個Fragment,指定要添加的Fragment和目標(biāo)View,如下:

1 2 3 ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit();

add()方法中的第一個參數(shù)是Fragment所要放置的目標(biāo)ViewGroup,通過資源ID指定,第二個參數(shù)是要添加的Fragment.只要你使用FragmentTransaction做了修改,你必須調(diào)用commit()方法來使修改生效.

Adding a fragment without a UI-添加一個沒有UI的Fragment


上面的例子想你展示了怎么添加一個含有UI的Fragment到你的Actvity.然而,對于不想增加而外UI的Activity來說,你也可以使用Fragment來進(jìn)行后臺行為.

為了添加一個沒有UI的Fragment.需要使用add(Fragment, String) 方法,其中,你需要為Fragment提供一個字符串的標(biāo)志而不是一個視圖ID.這樣增加的Fragment,由于沒有涉及到Activity的視圖,所以不會調(diào)用onCreateView()方法.所以你不需要實現(xiàn)這個方法.

為Fragment提供一個字符串標(biāo)志不一定只局限于沒有UI的Fragment,你也可以為有UI的Fragment指定一個字符串標(biāo)志,但是如果這個Fragment真的沒有UI,那這個字符串標(biāo)志是確定它的唯一標(biāo)志.如果你想在后面從Activity中獲取到這個fragment,你需要使用findFragmentByTag()方法.

在FragmentRetainInstance.java文件的例子展示了Actvity怎么使用一個沒有UI的fragment來出來后臺工作.

Managing Fragments-管理fragment


為了管理你Activity中的fragment,你需要使用FragmentManager.你可以通過你Activity中的getFragmentManager()來獲取它.

使用FragmentManager你可以:

  • 使用findFragmentById()(提供UI的Fragment)或者findFragmentByTag()(沒有提供UI的Fragment) 獲取你Activity存在的Fragment,

  • 使用popBackStack()把Fragment從返回棧中彈出(模擬用戶的返回命令).

  • 使用addOnBackStackChangedListener()方法為返回棧的變化注冊監(jiān)聽器.

請參考文檔的 FragmentManager 類來查看過于這些方法(還有其他方法)的更多內(nèi)容.

正如前面的文檔所講的,你也可以使用FragmentManager來打開FragmentTransaction,FragmentTransaction允許你執(zhí)行添加,刪除Fragment的事務(wù).

Performing Fragment Transactions-執(zhí)行Fragment事務(wù)


在你的Activity中使用Fragment的最大好處就是可以針對用戶的操作,進(jìn)行對Fragment的添加,移除,替換等等其他操作.你提交給Activity的每個變化稱為一個事務(wù),這些事務(wù)你可以使用FragmenTransaction的API來實現(xiàn).你也可以在Activity管理的返回棧中保存每個事務(wù),使用戶可以在Fragmen的變化后返回之前的狀態(tài)(類似于在Activity跳轉(zhuǎn)后的返回).

你可以像這樣從FragmentManager中取得一個FragmentTransaction的實例:

1 2 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

每個事務(wù)是一系列你想要同時執(zhí)行的Fragmen的變化.你可以使用像add(),remove(),replace()這樣的方法來為一個事務(wù)設(shè)定你想要執(zhí)行的操作.為了使Activity的事務(wù)生效,你必須執(zhí)行commit()方法.

在你調(diào)用commit()方法的之前,為了添加這個事務(wù)到一個Fragmen事務(wù)的返回棧,你可能想要調(diào)用addToBackStack()方法.這個返回棧被Activity管理,允許用戶通過按下返回按鍵返回之前的Fragmen狀態(tài).

這里展示了怎么使用一個Fragmen替換另一個,然后在返回棧中返回到之前的狀態(tài).

123456789 10 11 12 13 14 15 // Create new fragment and transaction //創(chuàng)建一個新的Fragmen和事務(wù) Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction();// Replace whatever is in the fragment_container view with this fragment, //使用這個Fragment替換在Fragmen容器中的Fragmet // and add the transaction to the back stack //添加這個事務(wù)到返回棧 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null);// Commit the transaction //提交這個事務(wù). transaction.commit();

在這個例子中,新的Fragmen替換了R.id.fragment_container ID指定的布局容器中當(dāng)前存在的fragment(如果存在的話).通過調(diào)用addToBackStack()方法,替換事務(wù)被保存在了返回棧中,這樣用戶可以回退這個事務(wù),通過按下返回鍵返回到以前的fragment.

如果你在事務(wù)中添加了多個變化(比如另一個add()方法或者remove()方法),然后調(diào)用了addToBackStack()方法,那在你調(diào)用commit()方法之前的所有變化都會作為單獨的事務(wù)被添加到返回棧中,返回鍵將會把他們?nèi)炕赝?

除了下面這些,其他的情況和你在FragmentTransaction中添加的順序沒有關(guān)系

  • 你不行在最后調(diào)用commit()方法

  • 如果你在向同一個容器添加多個fragment,那么你添加的順序決定了他們在視圖層出現(xiàn)的順序.

如果在你執(zhí)行一個移除所有fragment的事務(wù)的時候沒有調(diào)用addToBackStack()方法,那么這個fragment將會在事務(wù)提交后被摧毀,用戶不能再返回到之前的fragment.如果你在移除fragment的時候調(diào)用了addToBackStack()方法,那這個fragment會被停止,并可以在用戶按返回的時候恢復(fù).

小貼士:對于每個fragment事務(wù),你可以在提交之前通過調(diào)用setTransition()來應(yīng)用一個fragment動畫.

調(diào)用commit()方法不能立即執(zhí)行事務(wù)而是安排它運行在Activity的UI線程中("主"線程)---如果這線程可以這么做的話.如果需要,你可以在你UI線程中調(diào)用executePendingTransactions()方法來直接執(zhí)行commit()方法提交的事務(wù).這么多一般不必要除非事務(wù)依賴于其他線程的工作.

注意:你只可以在Activity保存他狀態(tài)之前(在用戶離開這個Actvity的時候)使用commit()方法來提交一個事務(wù).如果你在這個時間點之后提交,系統(tǒng)會拋出一個異常.這是因為如果Activity需要恢復(fù),在提交之后的狀態(tài)可能會丟失.對于允許丟失提交的情況,請使用commitAllowingStateLoss()方法.

Communicating with the Activity-與Activity的通訊


即使fragment是作為一個object實現(xiàn)的,獨立于Activity的并且可以在那多個Activity中使用,但是一個fragment實例還是和它所在的容器有直接的關(guān)系.

特別的,fragment可以通過getActivity()方法來訪問Activity實例并可以輕易的執(zhí)行像在activity視圖中查找View的任務(wù).

1 View listView = getActivity().findViewById(R.id.list);

Likewise, your activity can call methods in the fragment by acquiring a reference to the Fragment from FragmentManager, using findFragmentById() or findFragmentByTag(). For example:

同樣的,使用findFragmentById()或findFragmentByTag()通過從FragmentManager獲取一個對這個Fragment的引用,你的Activity可以調(diào)用fragment中的方法

1 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

Creating event callbacks to the activity-為Activity創(chuàng)建時間回調(diào)


在一些情況下,你可惜需要一個Fragment和Activity共享事件.一個好的方法是在Fragment中定義一個回調(diào)接口然后讓承載他的Activity實現(xiàn)它.當(dāng)Activity通過接口接收到調(diào)用時,必要時他可以和視圖中的其他Fragment共享信息.

舉個例子,如果一個新的應(yīng)用在一個Activity中有兩個Fragment,一個顯示一列文章標(biāo)題(FragmentA),另一列顯示文章內(nèi)容(FragmentB),那么在一列被選中的時候,FragmentA必須告訴Actvity那一列被選中了,這樣Actvity就可以告訴FragmentB顯示哪一篇文章.在這種情況下,OnArticleSelectedListener 接口會在FragmentA中聲明.

1 2 3 4 5 6 7 8 public static class FragmentA extends ListFragment {...// Container Activity must implement this interfacepublic interface OnArticleSelectedListener {public void onArticleSelected(Uri articleUri);}... }

然后承載Fragment的Activity實現(xiàn)OnArticleSelectedListener接口并重寫onArticleSelected()方法來通知FragmentB響應(yīng)FragmentA的事件.為了保證這個Activity實現(xiàn)了這個接口,FragmentA的onAttach()方法(系統(tǒng)在添加Fragment到這個Activity的時候調(diào)用)通過把Activity參數(shù)傳遞到onAttach()方法傳遞實例化一個OnArticleSelectedListener實例.

123456789 10 11 12 13 14 public static class FragmentA extends ListFragment {OnArticleSelectedListener mListener;...@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);try {mListener = (OnArticleSelectedListener) activity;} catch (ClassCastException e) {throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");}}... }

如果Activity沒有實現(xiàn)這個接口,那么Fragment會拋出ClassCastException異常.上面的成功例子中,mListener成員有一個Activity實現(xiàn)的OnArticleSelectedListener的引用.這樣FragmentA可以通過調(diào)用OnArticleSelectedListener接口定義的方法來共享事件.比如:如果FragmentA是listFragment的擴(kuò)展,用戶每次點擊list的一項,系統(tǒng)會調(diào)用Fragment的onListItemClick()方法,然后調(diào)用onArticleSelected() 方法來和Activity分享事件信息.

123456789 10 11 12 public static class FragmentA extends ListFragment {OnArticleSelectedListener mListener;...@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// Append the clicked item's row ID with the content provider UriUri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);// Send the event and Uri to the host activitymListener.onArticleSelected(noteUri);}... }

onListItemClick()方法傳遞的參數(shù)是點擊項的行ID,Activity(或Fragment)可以用它來從應(yīng)用的ContentProvider填充文章信息.

更多關(guān)于使用content provider的信息請參閱Content Providers文檔.

Adding items to the Action Bar-在Action Bar上添加項


你的Fragment可以通過實現(xiàn)onCreateOptionsMenu()來為Activity的Options Menu創(chuàng)建菜單項(結(jié)果就是形成ActionBar).為了讓這個方法接收到調(diào)用,你必須在onCreate()方法中調(diào)用setHasOptionsMenu()方法來表明這個Fragment允許在Options Menu中增加項(否則,Fragment將不能接收onCreateOptionsMenu()的調(diào)用).

你從Fragment 添加到 Options Menu的任何項都是現(xiàn)存菜單項的附加項.在一個菜單項選中的時候,Fragment也接收響應(yīng)onOptionsItemSelected()方法的調(diào)用.

你也可以在你的Fragment視圖中通過調(diào)用registerForContextMenu()方法來注冊一個視圖,從而提供一個上下文菜單.當(dāng)用戶打開上下文菜單時,Fragment會接收一個onCreateContextMenu()的調(diào)用,當(dāng)用戶選擇一項的時候,Fragment接收一個onContextItemSelected()的調(diào)用.

注意.即使你的Fragment在每個添加的菜單項接收了一個on-item-selected調(diào)用,在用戶選擇一個菜單項的時候,Activity是第一個接受各自調(diào)用的組件.如果Activity實現(xiàn)的on-item-selected調(diào)用沒有處理選擇項后的事件,那這個事件會傳遞到Fragment的回調(diào)中.這對 Options Menu 和上下文菜單都是適用的.

更多關(guān)于菜單的信息,參考Menus and Action Bar一文.

Handling the Fragment Lifecycle-處理Fragment的生命周期


Figure 3. The effect of the activity lifecycle on the fragment lifecycle.
圖三 Activity生命周期做Fragment生命周期的影響

處理Fragment的生命周期和處理Activity的生命周期很相似.和Activity一樣,Fragment的生命周期有一下三個狀態(tài):

Resumed

  • * Fragment在運行中的Activity中可見

Paused

  • * 另一個Activity在前臺或者獲得了焦點,但是Fragment所在的Activity仍然可以看到(可能是前臺Activity占據(jù)了屏幕的一部分或者是半透明的)

Stopped

  • * Fragment不可見.宿主Activity可能已經(jīng)被停止了或者這個Fragment已經(jīng)從這個Activity中移除了并被添加到了返回棧.一個停止的Fragment仍然是存活的(所有的狀態(tài)和成員信息被系統(tǒng)保存著).然而他不再對Activity可見,如果宿主Activity被殺死了,他也會被殺死.

和Activity一樣,在這個Activity所在的進(jìn)程被殺死或者你需要在Activity重新創(chuàng)建的時候保存Fragment的狀態(tài),你可以用Bundle來做這個工作.你可以在Fragment執(zhí)行onSaveInstanceState()方法的時候保存它的狀態(tài),然后在onCreate()或者onCreateView(),onActivityCreated()方法的時候恢復(fù)這些狀態(tài).更多關(guān)于保存狀態(tài)的內(nèi)容參考Activity文檔.

Activity和Fragment最大的不同是他們在返回棧中的存在形式.默認(rèn)的,Activity在停止的時候,是放在一個被系統(tǒng)管理的返回棧中(這樣用戶可以使用back按鈕返回,就像在Tasks and Back Stack一章中談?wù)摰哪菢?.然而在一個移除Fragment的事務(wù)中,只有在你通過調(diào)用addToBackStack()明確的指明這個Fragment不要被保存,這個Fragment才會被放在被宿主Activity管理的返回棧中.

另外,管理Fragment的生命周期和管理Activity的生命周期很相似.所以,當(dāng)管理Activity生命周期的方法也適于管理Fragment的生命周期.當(dāng)然你也需要明確Activity對Fragment生命周期的影響.

注意,如果在你的Fragment中需要一個context對象,你可以調(diào)用getActivity.然而,只有這個Fragment附在這個Activity上的時候,才可以調(diào)用getActivity().如果Fragment還沒有附加在Activity上,或者在最后的生命周期和Activity分離了,那getActivity()方法將會返回null.

Coordinating with the activity lifecycle-和Activity生命周期的協(xié)調(diào)


擁有Fragment的Activity的生命周期會直接影響Fragment的生命周期,每個Activity生命周期方法會影響到每個Fragment.舉個例子,當(dāng)一個Activity執(zhí)行onPause()方法的時候,它里面的每個Fragment也會執(zhí)行onPause().

Fragment有一些額外的生命周期,用來處理和Activity的特殊交換,從而可以執(zhí)行形如創(chuàng)建和銷毀FragmentUI的事情.這些額外的回調(diào)方法有:

onAttach()

  • * 當(dāng)Fragment和Activity鏈接起來的時候調(diào)用(Activity在這里傳送過來).

onCreateView()

  • * 創(chuàng)建Fragment的視圖層.

onActivityCreated()

  • * 當(dāng)Activity的onCreate返回的時候執(zhí)行.

onDestroyView()

  • * 當(dāng)Fragment的試圖層被移除的時候執(zhí)行.

onDetach()

  • * 當(dāng)Fragment和Activity分離的時候執(zhí)行.

Fragment生命周期的流圖,由于被宿主Activity影響,可以用圖三表示.在這個表中,你可以知道每個Activity的每個狀態(tài)是怎樣決定一個Fragment收到的回調(diào)方法的.比如,當(dāng)一個Activity收到他的onCreate()方法的時候,他里嗎的Fragment不會再收到onActivityCreated()方法的回調(diào).

一旦Activity到達(dá)了resume狀態(tài),你可以隨意添加和移除Activity中的Fragment.當(dāng)然,只有這個Activity在resume狀態(tài)的時候,Fragment的生命周期才可以獨立的變化.

然而,當(dāng)activity離開了resume狀態(tài),Fragment會再一次被activity推到它的生命周期中.

Example-例子


為了把上面介紹的知識匯總,這里有個使用兩個Fragment組成兩個視圖布局的例子.下面的activity包含兩個Fragment,一個用來顯示Shakespeare話劇的標(biāo)題,另一個用來顯示選中話劇的簡介.也演示了怎么根據(jù)屏幕的不同為這兩個Fragment提供不同的配置.

注意:完整代碼在FragmentLayout.java中.

主activity用平常的方式生成布局,在onCreate()方法的時候:

1 2 3 4 5 6 @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_layout); }

The layout applied is fragment_layout.xml:
fragment_layout.xml如下:

123456789 10 11 12 13 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width"match_parent"><fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"android:id"1"android:layout_width"match_parent" /><FrameLayout android:id"1"android:layout_width"match_parent"android:background="?android:attr/detailsElementBackground" /></LinearLayout>

通過布局文件我們知道,系統(tǒng)在activity載入布局的時候?qū)嵗疶itlesFragment(話劇的標(biāo)題),FragmentLLayout(顯示話劇內(nèi)容簡介的Fragment)占據(jù)右邊的屏幕但是現(xiàn)在沒有內(nèi)容.就像你下面看到的那樣,直到用戶選擇了標(biāo)題一個Fragment才會被放到FrameLayout.

然而,不是多有的屏幕配置都足夠顯示這兩個Fragment視圖.按照res/layout-land/fragment_layout.xml文件,上面的布局只適合橫屏.

那么當(dāng)屏幕在豎屏的時候,系統(tǒng)會使用下面的布局,保存在res/layout/fragment_layout.xml中.

1 2 3 4 5 6 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width"match_parent"><fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"android:id="@+id/titles"android:layout_width"match_parent" /> </FrameLayout>

這個布局值包含TitlesFragment.這意味著當(dāng)設(shè)備在豎屏的時候,只有話劇的標(biāo)題是可見的.所以,當(dāng)用戶點擊列表的一項的時候,應(yīng)用將會開始一個新的activity來顯示簡介而不是載入第二個Fragment.

接下來,你將看到這在Fragment類中是怎么實現(xiàn)的.首先是TitleFragment,顯示了莎士比亞話劇的標(biāo)題.這個Fragment繼承自ListFragment,可以通過它實現(xiàn)大多數(shù)顯示列表信息操作.

正如你看到的那樣,注意在用戶點擊列表響的時候,有兩個可能的行為:如果這兩個視圖存在,將在這個activity中創(chuàng)建并顯示一個新的Fragment(把Fragment添加到FragmentLayout中);如果只有一個視圖(豎屏),那會啟動一個新的activity(Fragment在這個activity中顯示).

123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 public static class TitlesFragment extends ListFragment {boolean mDualPane;int mCurCheckPosition = 0;@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);// Populate list with our static array of titles.setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));// Check to see if we have a frame in which to embed the details// fragment directly in the containing UI.View detailsFrame = getActivity().findViewById(R.id.details);mDualPane null && detailsFrame.getVisibility() == View.VISIBLE;if (savedInstanceState != null) {// Restore last state for checked position.mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);}if (mDualPane) {// In dual-pane mode, the list view highlights the selected item.getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);// Make sure our UI is in the correct state.showDetails(mCurCheckPosition);}}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("curChoice", mCurCheckPosition);}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {showDetails(position);}/* * * Helper function to show the details of a selected item, either by* displaying a fragment in-place in the current UI, or starting a* whole new activity in which it is displayed.* /void showDetails(int index) {mCurCheckPosition = index;if (mDualPane) {// We can display everything in-place with fragments, so update// the list to highlight the selected item and show the data.getListView().setItemChecked(index, true);// Check what fragment is currently shown, replace if needed.DetailsFragment details = (DetailsFragment)getFragmentManager().findFragmentById(R.id.details);if (details index) {// Make new fragment to show this selection.details = DetailsFragment.newInstance(index);// Execute a transaction, replacing any existing fragment// with this one inside the frame.FragmentTransaction ft = getFragmentManager().beginTransaction();ft.replace(R.id.details, details);ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);ft.commit();}} else {// Otherwise we need to launch a new activity to display// the dialog fragment with selected text.Intent intent = new Intent();intent.setClass(getActivity(), DetailsActivity.class);intent.putExtra("index", index);startActivity(intent);}} }

第二個Fragment,DetailsFragment顯示了在TitleFragment中選中的話劇簡介.

123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public static class DetailsFragment extends Fragment {/* * * Create a new instance of DetailsFragment, initialized to* show the text at 'index'.* /public static DetailsFragment newInstance(int index) {DetailsFragment f = new DetailsFragment();// Supply index input as an argument.Bundle args = new Bundle();args.putInt("index", index);f.setArguments(args);return f;}public int getShownIndex() {return getArguments().getInt("index", 0);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (container == null) {// We have different layouts, and in one of them this// fragment's containing frame doesn't exist. The fragment// may still be created from its saved state, but there is// no reason to try to create its view hierarchy because it// won't be displayed. Note this is not needed -- we could// just run the code below, where we would create and return// the view hierarchy; it would just never be used.return null;}ScrollView scroller = new ScrollView(getActivity());TextView text = new TextView(getActivity());int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4, getActivity().getResources().getDisplayMetrics());text.setPadding(padding, padding, padding, padding);scroller.addView(text);text.setText(Shakespeare.DIALOGUE[getShownIndex()]);return scroller;} }

來自TitleFragment的調(diào)用,如果用戶點擊列表項的時候當(dāng)前布局不包含R.id.details視圖(DetailsFragment 所在的視圖),那應(yīng)用將會啟動DetailsActivity 來顯示選中項的內(nèi)容簡介.

這里是DetailsActivity,在屏幕是豎屏的時候,簡單的嵌入在了Fragment中來顯示選中的話劇簡介.

123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 public static class DetailsActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE) {// If the screen is now in landscape mode, we can show the// dialog in-line with the list so we don't need this activity.finish();return;}if (savedInstanceState == null) {// During initial setup, plug in the details fragment.DetailsFragment details = new DetailsFragment();details.setArguments(getIntent().getExtras());getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();}} }

注意activity會在橫屏的時候結(jié)束自己,這樣主activity可以接管并顯示DetailsFragment旁邊的TitlesFragment.如果用戶在豎屏的時候啟動DetailsActivity,然后把設(shè)備轉(zhuǎn)到橫屏(將會重啟當(dāng)前的activity).

更多使用Fragment的例子(包括這個例子的全部代碼),請參考API Demo(可以在SDK例子那里下載).

?

轉(zhuǎn)載于:https://www.cnblogs.com/yangwuweiyouwei/p/3485242.html

總結(jié)

以上是生活随笔為你收集整理的[转]使用fragments的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品小视频 | 久久综合中文色婷婷 | 国产99久久九九精品免费 | 99r精品视频在线观看 | 国产色就色 | 国产精品免费久久久久影院仙踪林 | 国产污视频在线观看 | 欧美一级在线观看视频 | 丁香婷婷色综合亚洲电影 | 久久久久久综合网天天 | 欧美国产91| 黄色软件在线观看 | 色免费在线 | 亚洲污视频 | 亚洲综合网站在线观看 | 国产永久免费高清在线观看视频 | 久久精品xxx | 亚洲五月综合 | 99精品福利| 天堂av在线网| 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 91免费高清在线观看 | 欧美一级片 | 九九免费精品 | 久久免费国产视频 | 久久99国产综合精品免费 | 精品人人人人 | 91伊人久久大香线蕉蜜芽人口 | 女人18毛片90分钟 | 久久久精品欧美 | 成人免费在线观看电影 | 美女黄视频免费 | 国产成人在线精品 | 国产精品久久久久影视 | 国产一二三在线视频 | 日本午夜免费福利视频 | 久久久久日本精品一区二区三区 | 夜夜爽夜夜操 | 天天艹天天干天天 | 99久在线精品99re8热视频 | 一区在线电影 | 99精品国产高清在线观看 | 欧美日韩中文字幕在线视频 | 午夜av免费看 | 日日摸日日 | 一区二区三区免费看 | www.黄色片网站 | 亚洲精品国产精品国自产 | 亚洲一区二区精品在线 | 久久视频一区二区 | 九九综合在线 | 久久av免费| 在线看片视频 | 国产美女视频免费观看的网站 | 亚洲精品a区 | 国产亚洲精品日韩在线tv黄 | 久久麻豆精品 | 精品毛片久久久久久 | 国产精品一区二区久久 | 午夜视频在线观看欧美 | 欧美日本在线观看视频 | 亚洲精品国产综合99久久夜夜嗨 | 99视频在线| 午夜精品久久久久久久99婷婷 | 在线观看免费一级片 | 超碰97成人 | 四虎影视精品永久在线观看 | 久久手机看片 | 日韩一级黄色片 | 亚洲闷骚少妇在线观看网站 | 久久五月情影视 | 亚洲欧洲精品一区二区精品久久久 | 在线看黄网站 | 欧美精品xxx| 91精品国产自产在线观看 | 香蕉精品视频在线观看 | 日韩国产在线观看 | 免费精品久久久 | 99国产一区二区三精品乱码 | 激情深爱五月 | 丰满少妇一级片 | 日韩一区二区三区高清免费看看 | 久久久黄视频 | 国产精品剧情在线亚洲 | 免费看一级特黄a大片 | 欧美在线aa | 怡红院av久久久久久久 | 日韩黄色中文字幕 | 国产精品毛片久久久久久久 | 久久视频在线看 | 999久久a精品合区久久久 | 在线播放第一页 | 亚州精品在线视频 | 丝袜一区在线 | 一二三四精品 | 热re99久久精品国产66热 | 色狠狠久久av五月综合 | 欧美精品久久久久久久久久丰满 | 免费91在线观看 | 精品美女久久久久 | 高清久久久 | 色香蕉在线 | 精品在线免费观看 | 国产高清不卡一区二区三区 | 日韩精品免费在线 | 国产一区二区电影在线观看 | 色搞搞| 久久无码精品一区二区三区 | 精品国产乱码久久久久 | 青青视频一区 | 狠狠狠色丁香综合久久天下网 | 久久女同性恋中文字幕 | 天海冀一区二区三区 | 午夜视频色 | 免费日韩av片 | a久久久久久 | 亚洲六月丁香色婷婷综合久久 | 久久黄页| 99精品热视频 | 精品 激情 | 91九色porny蝌蚪主页 | 超碰97人人射妻 | 成人资源站| 国产乱对白刺激视频不卡 | 亚洲欧美少妇 | 欧美成人在线免费 | 91在线视频精品 | 91九色免费视频 | 精品久久久久一区二区国产 | 亚洲精品小视频 | 91久久国产综合精品女同国语 | 97人人网 | 狠狠综合网 | 国产 亚洲 欧美 在线 | 久久久久久久久久久久久影院 | 国产美女网站在线观看 | 在线国产片 | 中国黄色一级大片 | 亚洲成人av影片 | 91麻豆精品91久久久久同性 | 婷婷亚洲激情 | 日本中文字幕系列 | av888.com| 久久久精品视频成人 | 日本精品一区二区三区在线播放视频 | 国产精品永久免费在线 | 992tv在线成人免费观看 | 88av视频| 一级成人网 | 午夜精品一区二区三区四区 | 久久久免费精品国产一区二区 | 麻豆影视在线播放 | 香蕉91视频| av免费网页 | 亚洲伊人第一页 | 亚洲区二区| 四虎国产 | 中文字幕91 | av综合av | 午夜久久影视 | 久久午夜免费视频 | 久99久精品视频免费观看 | 黄色在线成人 | 亚洲精品乱码久久久久久蜜桃欧美 | 91精品视频免费看 | 精品国产人成亚洲区 | 日韩中文字幕在线不卡 | 欧美极度另类性三渗透 | 8x成人在线 | 亚洲国产资源 | 97超碰精品 | 婷婷资源站 | 欧美性另类| www激情久久 | 亚洲一级电影视频 | 亚洲精品国产综合99久久夜夜嗨 | 韩日精品中文字幕 | 夜夜操天天干, | 在线看国产精品 | 综合在线亚洲 | 国产99一区| 四虎在线视频 | 国产免费区 | 久草电影在线观看 | 黄色日本免费 | 日韩在线观看 | 日韩视频在线一区 | 国产精品中文在线 | 911国产在线观看 | 天天操天天色综合 | 国产一级三级 | 亚洲精品777 | 久草在线最新视频 | 2019av在线视频 | 国产一区自拍视频 | 亚洲精品午夜久久久 | 美女久久99| 国产伦理久久精品久久久久_ | 国产中文字幕一区二区 | 最近更新好看的中文字幕 | 日韩在线视频线视频免费网站 | 日韩中文字幕亚洲一区二区va在线 | 一区二区三区www | 在线 国产 亚洲 欧美 | 亚洲精品一区二区三区高潮 | 国产免费观看视频 | 蜜桃av人人夜夜澡人人爽 | 天天综合色天天综合 | a视频在线观看免费 | 在线免费观看羞羞视频 | 在线观av | 色中色综合 | 精品国产视频在线观看 | 中文国产字幕 | 国产成人精品久久久 | 欧美日韩视频观看 | 超碰人人做 | 色资源网在线观看 | av大全在线 | 亚洲精品国产精品国产 | 日韩在线二区 | 久久久精品视频成人 | 中文国产字幕 | 狠狠色丁香 | 911国产精品| 国产精品免费不 | 日韩av进入 | 91超国产| 久久a热6 | 亚洲国产av精品毛片鲁大师 | 黄色成年片 | 久久国产剧场电影 | 波多野结衣视频在线 | 91精品国产网站 | 在线观看视频国产 | 久久国产精品一区二区 | 中文字幕高清在线 | 九九热在线免费观看 | 五月天中文字幕mv在线 | 国产资源在线视频 | 美女视频黄网站 | 国产成人福利在线观看 | 日日日天天天 | 欧美日韩三级在线观看 | 欧美有色 | 色姑娘综合天天 | 久久精品视频一 | 樱空桃av| 中文字幕成人网 | 国产精品网红直播 | 午夜三级影院 | 国产精品乱码一区二三区 | 日本在线成人 | 黄色免费观看视频 | 超碰com| 国内视频 | 久久av不卡 | 久久精品一二三区白丝高潮 | 国产在线免费观看 | 久久精品2 | 国产九九九九九 | 亚洲日本va在线观看 | 婷婷综合亚洲 | 成年人视频在线观看免费 | 久久不卡电影 | 91在线国产观看 | 水蜜桃亚洲一二三四在线 | 欧美精品久久久久性色 | 日本中文字幕电影在线免费观看 | 美女国产网站 | 免费看黄在线观看 | 伊人视频| 伊人天天操 | 青青视频一区 | 国产色一区| 欧美性色xo影院 | 色丁香久久 | 激情av网| 国产精品久久久久久吹潮天美传媒 | 黄色亚洲精品 | 中文字幕一区二区三区在线播放 | www蜜桃视频 | 亚洲精品综合一二三区在线观看 | 激情视频网页 | 久久久久国产精品一区二区 | 国产精品久久久久久久久久尿 | 91看片淫黄大片在线播放 | 国产一级精品视频 | 亚洲激情视频在线 | 99久久9| 伊人久久国产 | 久久夜视频 | 国产成人精品网站 | 婷婷色婷婷 | 国产精品久久久久久久久久久久午夜片 | 高清中文字幕av | 日本三级香港三级人妇99 | 日本老少交 | 91麻豆精品国产91久久久久久久久 | 五月婷婷导航 | 亚洲九九| 成人看片 | 久久久久久久久久久高潮一区二区 | 综合色站导航 | 7799av| 久久草视频 | 亚洲作爱 | 丰满少妇对白在线偷拍 | 日韩精品免费在线观看视频 | 综合激情av | www色| 青青河边草免费直播 | 香蕉视频在线观看免费 | av中文字幕日韩 | 国产免费精彩视频 | 天天草视频 | 久久视频在线观看 | 国产精品入口久久 | av在线激情 | 日本中文字幕观看 | 国产精品久久久久久久久久久久午夜 | 国产麻豆精品一区二区 | 日批视频在线观看免费 | 人人搞人人爽 | 欧美xxxx性xxxxx高清 | 天天操狠狠操夜夜操 | 亚洲欧美激情精品一区二区 | 国产黄免费 | 午夜精品久久 | 国产一区视频在线观看免费 | 日韩精品免费一区二区在线观看 | 国产91对白在线 | 国产精品久久久久久模特 | 一区二区电影网 | 91黄色在线观看 | 国产精品高潮呻吟久久久久 | www.久久久久 | 伊人干综合| 日韩在线三区 | 成年人免费av | 西西444www大胆无视频 | 午夜av在线电影 | 欧美999| 激情五月婷婷激情 | 国产又粗又猛又色又黄视频 | 国产精久久久 | 免费观看一级 | 久久99免费观看 | 精品v亚洲v欧美v高清v | 免费在线观看不卡av | 日本久久久久 | 天堂av在线免费观看 | 有码中文字幕 | 六月婷色 | 色免费在线 | 五月婷婷丁香在线观看 | 一本—道久久a久久精品蜜桃 | 亚洲精品小视频 | 日韩av一区二区在线影视 | 天天精品视频 | av片子在线观看 | 日韩免费高清在线观看 | 久久九九九九 | 日韩欧美在线高清 | 久久久精品在线观看 | 五月天com| 精品极品在线 | 香蕉视频网站在线观看 | 狠狠插狠狠干 | 国产99久久久国产精品免费二区 | 亚洲乱码在线 | 国产精品久久久久毛片大屁完整版 | 天天搞天天干 | 国产精品九九视频 | 伊人开心激情 | 亚洲传媒在线 | 免费在线中文字幕 | 日韩精品欧美精品 | 国产一区欧美一区 | 手机在线看a | 欧美日韩在线观看一区 | jizzjizzjizz亚洲 | 国产一区在线视频播放 | 三级黄色片在线观看 | 欧美色精品天天在线观看视频 | 中文字幕免费播放 | 国内精品久久久精品电影院 | 国产精品二区在线观看 | 成人在线你懂得 | 日韩有码第一页 | 欧美激情综合五月色丁香 | 久久蜜桃av| av成人资源| 免费看的黄色的网站 | 国产精品91一区 | 亚洲综合成人专区片 | 国产精品1区2区 | 超碰在线天天 | 一区二区三区精品在线视频 | 国产一级电影在线 | 亚洲电影成人 | 午夜精品久久久久久中宇69 | av线上看| 国产福利网站 | 国产成人一区二区三区在线观看 | 九色视频网址 | www.成人sex| 天堂av一区二区 | 热久久国产 | 97人人模人人爽人人喊中文字 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲天堂精品视频 | 欧美日韩另类视频 | 国产无限资源在线观看 | 尤物97国产精品久久精品国产 | 国产 欧美 在线 | 精品视频久久久 | 天天操夜夜操国产精品 | 色七七亚洲影院 | 亚洲成年人在线播放 | 精品国产1区2区3区 国产欧美精品在线观看 | 国产免费嫩草影院 | 国产高清第一页 | av免费片| 国产99久久九九精品免费 | 欧美色图一区 | 午夜精品一区二区三区四区 | 欧美美女视频在线观看 | 国产69精品久久久久9999apgf | 日韩影视精品 | 久久国产精品99久久久久久丝袜 | 丁香电影小说免费视频观看 | 久久精品日产第一区二区三区乱码 | 深夜免费小视频 | 中文在线字幕免费观看 | 人人爽人人做 | 亚洲高清视频在线播放 | 97品白浆高清久久久久久 | 日本久久成人中文字幕电影 | 91在线小视频 | 日本精品久久久久 | 久久av中文字幕片 | 国产一区二区三区四区大秀 | 亚洲视频一区二区三区在线观看 | 黄色aa久久 | 国产视频69 | 特片网久久 | 国产精品高清一区二区三区 | 午夜视频在线观看一区二区 | 97色综合 | 91视频免费播放 | 久久久久久久久影视 | 日韩a级黄色片 | 日本久久电影网 | 久久久网址| 亚洲精品字幕在线观看 | 99久久精品无免国产免费 | 色天天| 香蕉国产91 | 少妇自拍av | 国产成人精品国内自产拍免费看 | 精品久久久久久综合日本 | 亚洲高清视频一区二区三区 | 毛片网在线 | 久久久91精品国产一区二区三区 | 91亚洲国产成人 | 国产精品99久久久久久久久 | 九九九国产 | 日本精品xxxx | 久久久久久久久久久福利 | 国产在线久草 | 国产在线精品区 | 国产精品毛片一区二区三区 | 在线看福利av | 中文字幕一区二区三区乱码不卡 | 黄色av免费电影 | 亚洲另类人人澡 | 超碰免费观看 | 免费人做人爱www的视 | 国产精品久久久久久久久费观看 | 日本中文在线观看 | 香蕉看片| 国产一区在线观看免费 | 狠狠操精品 | 国产精品一区二区白浆 | 国产精品一码二码三码在线 | 亚洲砖区区免费 | 国产黄在线免费观看 | 国产免费影院 | 黄色小视频在线观看免费 | 美女视频网 | 久久国产精品一二三区 | 国精产品满18岁在线 | 精品视频免费观看 | 国产精品免费久久久久影院仙踪林 | 91精品国产99久久久久久久 | 日产乱码一二三区别在线 | 久久综合国产伦精品免费 | 国产精品美女久久久久久 | 久久久夜色 | 欧美日本一二三 | 极品久久久 | 国产色视频一区二区三区qq号 | 色婷五月天 | 久久99国产精品免费网站 | 国产在线p| 999久久国产 | 久久久亚洲精品 | 色综合久久久久综合 | 伊人五月| 国产亚洲精品久久久久秋 | 日批视频在线播放 | 伊人精品在线 | 日韩理论电影在线 | 韩日成人av | 欧美日韩精品电影 | 在线观看一二三区 | 日韩欧美一区二区三区黑寡妇 | 亚洲一区二区三区miaa149 | 久久精品国产精品 | 日韩精品专区在线影院重磅 | 免费色黄 | 国产一区二区在线免费播放 | 超碰在线最新地址 | 国产美女精品在线 | 二区三区在线视频 | 久久久黄色 | 国内精品中文字幕 | 91在线一区 | 国产精品一区在线观看你懂的 | 99久久精品久久久久久清纯 | 四虎影视8848dvd | 成人片在线播放 | 99精品在线免费 | av在线一级 | 国产日韩欧美在线 | 久久成人在线 | 超碰在线日本 | 免费在线观看视频一区 | 99精品热| 五月综合激情网 | 日韩欧美视频免费观看 | 亚洲激精日韩激精欧美精品 | 9i看片成人免费看片 | 日日夜夜天天 | 国产精品国内免费一区二区三区 | 精品国产乱码一区二 | 精品久久久久久电影 | av黄色免费网站 | 日韩大片在线免费观看 | 亚洲精品黄网站 | 在线导航av | 国产精品一区免费看8c0m | 亚洲毛片久久 | 四虎在线永久免费观看 | 国产精品久久久久影视 | 极品久久久 | 亚洲欧洲久久久 | 国产精品中文字幕在线播放 | 成年一级片 | 欧美午夜寂寞影院 | 国产免费又粗又猛又爽 | 久久精品5| 天天翘av | 日韩一区二区三区不卡 | 91精品视频免费在线观看 | 久久成人欧美 | 日韩激情久久 | 日韩大片在线 | 国产精品男女 | 狠狠色丁香久久婷婷综合丁香 | 亚洲欧美国产精品va在线观看 | 国内精品久久影院 | 婷婷伊人五月 | 偷拍精偷拍精品欧洲亚洲网站 | 日韩中文字幕免费在线观看 | 国产免费片 | 深夜精品福利 | 日日操日日 | 91在线永久 | 欧美激情片在线观看 | 国产原创在线 | 欧美日本国产在线观看 | 午夜免费视频网站 | 伊人官网 | 国产码电影 | 亚洲香蕉在线观看 | 日韩免费观看一区二区三区 | 伊人天天狠天天添日日拍 | av先锋影音少妇 | 欧美成人精品在线 | 天天操天天操天天操天天操天天操 | 久久国产精品第一页 | 色全色在线资源网 | 欧美三级高清 | 四虎影视av | 中文字幕精品一区二区三区电影 | 九九久久久久久久久激情 | 色狠狠综合 | 免费av的网站 | 麻花传媒mv免费观看 | 久久久久女教师免费一区 | 正在播放亚洲精品 | 精品99久久| 久久久久成人精品亚洲国产 | 国产精品久久久久久久久久久久午夜片 | 日韩精品视频在线免费观看 | 久久久国产电影 | 天天曰 | 青青河边草免费观看完整版高清 | 亚洲精品午夜国产va久久成人 | 99久热| 成人在线观看日韩 | 婷婷av色综合 | 成人亚洲综合 | 国产成人精品在线播放 | 日韩啪啪小视频 | 国产黄色成人 | www.狠狠插.com | 欧美视频在线观看免费网址 | 国产精品大片在线观看 | 亚洲国产精品视频 | 九九免费在线观看视频 | 久久成人18免费网站 | 成人精品亚洲 | 成人黄色大片 | 欧美整片sss| 久久在线电影 | 激情综合中文娱乐网 | 午夜国产福利在线观看 | 一区二区三区在线观看免费视频 | 97在线观看免费视频 | 亚洲精品国产成人av在线 | 黄色在线免费观看网站 | 国产成免费视频 | 欧美日韩久久不卡 | 久草电影在线观看 | 欧美精品二| 色偷偷男人的天堂av | 亚洲精品一区二区精华 | 亚洲午夜精品在线观看 | 九七在线视频 | 免费在线观看一区二区三区 | 超碰人人草人人 | 日日爱av| 嫩小bbbb摸bbb摸bbb | 玖玖在线视频观看 | 亚洲一级免费观看 | 欧美夫妻生活视频 | 999久久久精品视频 日韩高清www | 亚洲黄在线观看 | 最近高清中文字幕在线国语5 | 在线成人一区二区 | 日韩最新中文字幕 | 很黄很污的视频网站 | 三级黄色理论片 | 综合久久五月天 | 成人一级免费视频 | 91在线视频网址 | 天天操人人要 | 深爱婷婷久久综合 | 九九免费在线观看视频 | 天海冀一区二区三区 | 国产亚洲小视频 | 人人看人人草 | 一级欧美日韩 | 成人理论在线观看 | 精品在线99| 一区二区三区三区在线 | 国产日产精品一区二区三区四区的观看方式 | 国产91免费在线观看 | 国产精品久久久久av免费 | 日日操夜夜操狠狠操 | 激情av一区二区 | 国产日产精品久久久久快鸭 | 中国一级片在线观看 | 欧美日韩国产一区二区在线观看 | 天天搞天天干天天色 | 成人午夜影院在线观看 | 国产亚洲片 | 狠狠色免费 | 国内综合精品午夜久久资源 | 国产69久久| www.五月婷婷.com | 狠狠狠狠狠狠狠狠干 | 六月丁香伊人 | 成人综合免费 | 久久久免费 | 日韩精品免费在线观看视频 | 欧美a级一区二区 | 亚洲乱码在线观看 | 国产一区免费看 | 特级aaa毛片 | 国内小视频 | 国产精品麻豆91 | 久久综合久色欧美综合狠狠 | 午夜久久视频 | 欧美天天干 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 天天看天天操 | 激情五月婷婷丁香 | 成年人黄色免费网站 | 久久这里有精品 | 欧美日韩精品在线一区二区 | 青青草华人在线视频 | 人人干狠狠干 | 成年人黄色免费看 | 麻豆国产在线播放 | 国产特级毛片aaaaaaa高清 | 久草在线视频在线 | 2023国产精品自产拍在线观看 | 日韩高清毛片 | 精品理论片 | 亚洲成年人在线播放 | 亚洲精品在线视频网站 | 欧美一级欧美一级 | 9i看片成人免费看片 | 国内精品久久久久久久久久久 | 黄污视频网站大全 | 欧美激情视频在线免费观看 | 国产看片网站 | 久草在线| 国产美女精品久久久 | 日韩大片在线免费观看 | 91九色porny蝌蚪主页 | 97理论电影 | 久久久精品网站 | 午夜av在线免费 | 国产精品一区二区在线播放 | 久久精品一区二区三区中文字幕 | 久久电影中文字幕视频 | 久久精品免费 | 亚洲精品午夜国产va久久成人 | 蜜臀久久99静品久久久久久 | 午夜精品久久久久久久久久久 | 热久久免费国产视频 | 九月婷婷色 | 国产免费中文字幕 | 欧美视屏一区二区 | 中文字幕在线观看你懂的 | 激情综合色播五月 | 国内久久久久久 | 国产伦精品一区二区三区… | 国产精品美女久久久久久久 | 国产在线播放一区二区三区 | 2017狠狠干| 国产网红在线 | 欧美午夜理伦三级在线观看 | 久久99精品久久久久久久久久久久 | 精品一区二区免费 | 99久久久久免费精品国产 | 四虎国产精品成人免费影视 | 欧美在线视频一区二区 | 亚洲最大av在线播放 | 亚洲永久精品一区 | 西西大胆免费视频 | 国产在线精品一区二区三区 | 国产打女人屁股调教97 | 国产精品一区二区久久久久 | 玖玖爱国产在线 | 久久免费视频一区 | 97韩国电影 | 日韩精品免费在线视频 | 麻花豆传媒mv在线观看网站 | 色综合久久久久久久 | 色网站在线免费 | 91麻豆国产福利在线观看 | 有码一区二区三区 | 永久免费视频国产 | 日日操天天爽 | 国产亚洲视频在线 | 亚洲人片在线观看 | av成人免费观看 | 久草在线免费播放 | 国产中文字幕精品 | 亚洲三级性片 | 亚洲最新在线 | 91热爆在线观看 | 久免费视频 | 热久久免费国产视频 | av在线看网站 | 最新中文字幕在线观看视频 | 成人在线免费小视频 | 精品美女久久久久 | 久久99精品视频 | 国产一二区免费视频 | 人人讲| 日本精品视频在线观看 | 波多野结衣亚洲一区二区 | 国产成人久久精品一区二区三区 | 日韩av成人在线观看 | 久热免费在线 | 99热网站| 亚洲天堂网在线观看视频 | 天天干,天天操,天天射 | 2019中文最近的2019中文在线 | 久草视频在线免费 | 天天爱天天操 | 免费黄色看片 | 久久国产精品网站 | 亚洲区二区 | 欧美日韩亚洲第一 | 午夜99| va视频在线 | av电影不卡 | 高清av免费一区中文字幕 | 特级大胆西西4444www | 国产精品成人一区二区三区吃奶 | 久久免费视频播放 | 人人看看人人 | 天天干天天干 | 国产精品久久久久影视 | 91精品办公室少妇高潮对白 | 91香蕉视频好色先生 | 国产黄色片一级 | 操处女逼| bayu135国产精品视频 | 午夜视频在线观看网站 | 片黄色毛片黄色毛片 | 久久国产精品久久精品 | 区一区二区三区中文字幕 | 亚洲精品在线播放视频 | 国产日韩精品在线观看 | 久久在线播放 | 欧美日韩高清一区二区 | 国产成人精品久久久久蜜臀 | 69国产盗摄一区二区三区五区 | 天天色.com| 国产三级视频在线 | 黄色一级大片在线观看 | 久久国产91 | 91中文字幕网 | 色中色综合 | 亚洲精品免费播放 | 欧美成人影音 | 日韩有码在线观看视频 | 欧美激情综合五月 | 日韩免费一级a毛片在线播放一级 | 高清久久久 | a久久久久久 | 亚洲精品久久久久中文字幕二区 | 日本中出在线观看 | 西西444www大胆高清图片 | 久草视频免费看 | 美女在线黄 | 香蕉久久国产 | 欧美性色19p | 欧美黄色成人 | 日日夜夜婷婷 | 久久婷婷丁香 | 欧美日韩aa | 麻豆视频www| 国产电影一区二区三区四区 | 亚洲精品一区二区三区在线观看 | 国产成人精品午夜在线播放 | 国产精品剧情在线亚洲 | 国产精品精品久久久 | 国产视频不卡 | 精品视频资源站 | 色综合久久久久综合99 | 国产精品三级视频 | 日韩精品久久久免费观看夜色 | 黄色免费看片网站 | 狠狠地操| 国产一级片不卡 | 丝袜+亚洲+另类+欧美+变态 | 久久免费高清视频 | 在线电影 一区 | 国产精品国内免费一区二区三区 | 婷婷激情综合五月天 | 久久五月婷婷丁香 | 中文字幕中文中文字幕 | 成人综合婷婷国产精品久久免费 | 日韩精品在线看 | 久久久精品亚洲 | 免费久久网站 | 成人综合婷婷国产精品久久免费 | 亚洲国产成人高清精品 | 国产视频网站在线观看 | 日本不卡123 | 久久成人国产精品免费软件 | 久久精品99国产精品酒店日本 | 久久久久久国产精品美女 | 高清av免费看 | 婷婷综合电影 | 色综合久久久久综合99 | 91精品视频在线观看免费 | 国产一区视频导航 | 伊人婷婷激情 | 亚洲午夜精品久久久久久久久 | 九九涩涩av台湾日本热热 | 国产视频99| 欧美日韩二三区 | 久久精品久久久精品美女 | 探花视频在线版播放免费观看 | 免费三级黄色片 | 国产91免费在线观看 | 欧美一区二区三区不卡 | 中文资源在线官网 | 在线看片日韩 | 亚洲涩涩网站 | 亚洲有 在线 | 日韩三级久久 | 天天操天天是 | 不卡日韩av | 精品亚洲视频在线观看 | 亚洲精品免费在线观看 | 欧美精品久久久久久久久久丰满 | 精品视频在线播放 | 国产精品a久久 | 九九久久在线看 | 色综合色综合久久综合频道88 | 五月综合久久 | 久久伊人爱 | 99精品欧美一区二区蜜桃免费 | 日韩一级电影在线观看 | 97超碰香蕉 | 久久人人干 | 亚洲精品网站在线 | 欧美一区二区日韩一区二区 | 一区二区三区高清不卡 | 久久久久国产精品免费 | 亚洲全部视频 | 日日夜夜艹| 99久久99久国产黄毛片 | 日日日爽爽爽 | 欧美在线观看禁18 | 欧美日韩亚洲第一页 | 成人中文字幕av | 色资源网在线观看 | 精品a级片 | 99久久成人| 91精品国产99久久久久久久 | 69人人 | 欧美乱码精品一区二区 | 久久综合之合合综合久久 | 天天插天天色 | 亚洲精品久久久蜜桃直播 | 国产精品美女在线观看 | 久久久99精品免费观看乱色 | 欧美激情视频在线免费观看 | 国产一级免费观看视频 | 国产1区2区3区精品美女 | 黄色软件网站在线观看 | 欧美极品在线播放 | 青青看片 | 国产女人40精品一区毛片视频 | 国产精品一区二区免费 | 成人精品一区二区三区中文字幕 | 麻豆国产网站入口 | 国内亚洲精品 | 日韩欧美在线一区二区 | 五月天激情综合 | 五月天丁香综合 | 婷婷 中文字幕 | 久久久久久久久久久国产精品 | 五月天av在线 | 草久视频在线 | 免费在线观看不卡av | 精品美女在线观看 | 国产精品视频久久 | 久久精品二区 | www.久久免费视频 | 免费看色视频 | 最近日本mv字幕免费观看 | 色婷av| 成人免费中文字幕 | 丁香婷婷在线观看 | 精品国偷自产在线 | 日韩精品一区不卡 | 久久av不卡| 色吊丝在线永久观看最新版本 | 国产视频 亚洲视频 | 色婷婷综合久色 | 特黄特色特刺激视频免费播放 | 四虎在线免费视频 | 久久综合五月 | 天天看天天干 | 久久99精品久久久久久清纯直播 | 欧美一级艳片视频免费观看 | 欧美成人黄 | 亚洲精品国产精品久久99热 | 欧美一区二区三区不卡 | 免费电影一区二区三区 | 婷婷九月丁香 | 国产片网站| 香蕉影院在线播放 | 亚洲h色精品 | 亚洲人成在线观看 | 九九国产精品视频 | 国产一二区视频 | 国产高清视频免费观看 | 高清久久久久久 | 97色婷婷成人综合在线观看 | 日韩欧美网址 | 在线日韩精品视频 | 欧美日韩亚洲在线 | 丁香视频全集免费观看 |