<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## Android開發之Fragment學習 ## 1.簡介: Fragment是Android 3.0引入的新API。 Fragment代表了 Activity的子模塊,因此可以把Fragment理解成Activity片段。Fragment用于自己的生命周期,也可以接受它自己的輸入事件。 Fragment必須被“嵌入” Activity中使用,因此雖然Fragment也擁有自己的生命周期,但Fragment的生命周期會受它所在的Activity的生命周期的控制。例如,當Activity暫停時,該Activity內的所有Fragment都會暫停;當Activity被銷毀時,該Activity內的所有Fragment都會被銷毀,只有當該Activity處于活動狀態時,程序員可通過方法獨立地操作Fragment。 ## 2.Fragment的幾個特征: 1)Fragment總是作為Activity界面的組成部分,Fragment可調用getActivity()方法獲取它所在的Activity, Activity調用FragmentManager的findFragmentByld()或findFragmentByTag()方法來獲取Fragment。 2)在Activity運行過程中,可調用 FragmentManager的add()、remove()、replace()方法動態地添加、刪除或替換Fragment。 3)—個Activity可以同時組合多個Fragment;反過來,一個Fragment也可被多 Activity 復用。 4)Fragment可以響應自己的輸入事件,并擁有自己的生命周期,但它們的生命周期直接被其所屬的Activity的生命周期控制。 Android 3.0引入Fragment的初衷是為了適應大屏幕的平板電腦,由于平板電腦的屏幕比手機屏蒂更大,因此可以容納更多的UI組件,且這些UI組件之間存在交互關系。Fragment簡化了大屏幕UI的設計,它不需要開發者管理組件包含關系的復雜變化,開發者使用Fragment對UI組件進行分組、模塊化管理,可以更方便地在運行過程中動態更新Activity的用戶界面。 例如:有如下新聞瀏覽界面,該界面需要在屏幕左邊顯示新聞列表,并在屏幕右邊顯示新聞內容,此時就可以在Activity中顯示兩個并排的Fragment左邊的Fragment顯示新聞列表,右邊的Fragment顯示新聞內容。由于每個Fragment擁有自己的生命周期,并可響應用戶輸入事件,因此可以非常方便地實現:當用戶單擊左邊列表的指定新聞時,右Fragment顯示相應的新聞內容。下圖左邊的“平板電腦”部分顯示了這種Ul界面![fragments](https://box.kancloud.cn/2015-12-01_565daa83b3e7e.jpg) 通過使用上面的Fragment設計機制,可以取代傳統的讓一個Activity顯示新聞列表,一個Activity顯示新文內容的設計。 由于Fragment是可復用的組件,因此如果需要在正常尺寸的手機屏幕上運行該應用,可以改為使用兩個 Activity,ActivityA包含 FragmentA、ActivityB包含 FragmentB。其中 ActivityA僅包含顯示文章列表FragmentA,而當用戶選擇一篇文章時,它會啟動包含新聞內容的 ActivityB,如上圖右邊的“手機,部分。由此可見,Fragment可以很好地支持上圖所示的兩種設計模式。 ## 3.創建Fragment 與創建Activity類似,開發者實現的Fragment必須繼承Fragment基類,Android提供了如下圖所示的Fragment繼承體系。 ![Fragment結構](https://box.kancloud.cn/2016-02-19_56c6aa3750d09.jpg) 開發者實現的Fragment,可以根據需要繼承上圖所示的Fragment基類或它的任意子類。接下來,實現Fragment與實現Activity非常相似,它們都需要實現與Activity類似的回調方法,例如onCreate()、onCreateView()、onStart()、onResume()、onPause()、onStop()等。 提示: 開發Fragment與開發Activity非常相似,區別只是開發Activity需要繼承Activity或其子類;但開發Fragment需要繼承Fragment及其子類.與此同時,只要將原來寫在Activity回調方法的代碼“移到”Fragment的回調方法中即可。 通常來說,創建Fragment通常需要實現如下三個方法。 1)onCreate():系統創建Fragment對象后回調該方法,實現代碼中只初始化想要在 Fragment中保持的必要組件,當fragment被暫停或者停止后可以恢復。 2)onCreateView():當Fragment繪制界面組件時會回調該方法。該方法必須返回一個View,該View也就是該Fragment所顯示的View。 3)onPause():當用戶離開該Fragment時將會回調該方法。 對于大部分Fragment而言,通常都會重寫上面這三個方法。但是實際上開發者可以根據需要重寫Fragment的任意回調方法,后面將會詳細介紹Fragment的生命周期及其回調方法為了控制Fragment顯示的組件,通常需要重寫onCreateView()方法,該方法返回的View將作為該Fragment顯示的View組件。當Fragment繪制界面組件時將會回調該方法。 例如如下方法片段: <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">重寫該方法,該方法返回的<span lang="EN-US">View</span>將作為<span lang="EN-US">Fragment</span>顯示的組件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> View onCreateView(LayoutInflater inflater</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>, ViewGroup container, Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">加載<span lang="EN-US">/res/layout/</span>目錄下的<span lang="EN-US">fragment_book_detail.xml</span>布局文件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>View rootView = inflater.inflate(R.layout.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">fragment_book_detail</span></em><span lang="EN-US" style="font-family:宋體; color:black">,</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>container,</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">false</span></strong><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">if</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> (</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black"> !=</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">null</span></strong><span lang="EN-US" style="font-family:宋體; color:black">)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_title</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">title</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_title</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">title</span><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_desc</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">desc</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_desc</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">desc</span><span lang="EN-US" style="font-family:宋體; color:black">);<span style="">???</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">return</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> rootView;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal"><span lang="EN-US" style="font-family:宋體; color:black">}</span></p></td></tr></tbody></table> 實例:開發發顯示圖書詳情的Fragment 下面Fragment將會顯示加載一份簡單的界面布局文件,并根據傳入的參數來更新界面組件該Fragment的代碼如下。 ### 3.1創建Fragment: <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">class</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> BookDetailFragment</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">extends</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> Fragment</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">static</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">final</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> String</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black"> =</span><span lang="EN-US" style="font-family:宋體; color:#2A00FF">"item_id"</span><span lang="EN-US" style="font-family:宋體; color:black">;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">保存該<span lang="EN-US">Fragment</span>顯示的<span lang="EN-US">Book</span>對象</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>BookContent.Book</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">void</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> onCreate(Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">super</span></strong><span lang="EN-US" style="font-family:宋體; color:black">.onCreate(savedInstanceState);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">如果啟動該<span lang="EN-US">Fragment</span>時包含了<span lang="EN-US">ITEM_ID</span>參數</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">if</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> (getArguments().containsKey(</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black"> = BookContent.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_MAP</span></em><span lang="EN-US" style="font-family:宋體; color:black">.get(getArguments()</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>.getInt(</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black">));</span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//①</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體">?</span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">重寫該方法,該方法返回的<span lang="EN-US">View</span>將作為<span lang="EN-US">Fragment</span>顯示的組件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> View onCreateView(LayoutInflater<span style="background:yellow">inflater</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>, ViewGroup container, Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">加載<span lang="EN-US">/res/layout/</span>目錄下的<span lang="EN-US">fragment_book_detail.xml</span>布局文件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>View rootView =<span style="background:silver">inflater</span>.inflate(R.layout.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">fragment_book_detail</span></em><span lang="EN-US" style="font-family:宋體; color:black">,</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>container,</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">false</span></strong><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">if</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> (</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black"> !=</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">null</span></strong><span lang="EN-US" style="font-family:宋體; color:black">)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_title</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">title</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_title</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">title</span><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_desc</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">desc</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_desc</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">desc</span><span lang="EN-US" style="font-family:宋體; color:black">);<span style="">???</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">return</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> rootView;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal"><span lang="EN-US">?</span></p></td></tr></tbody></table> ### 3.2創建ListFragment: <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">class</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> BookDetailFragment</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">extends</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> Fragment</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">static</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">final</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> String</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black"> =</span><span lang="EN-US" style="font-family:宋體; color:#2A00FF">"item_id"</span><span lang="EN-US" style="font-family:宋體; color:black">;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">保存該<span lang="EN-US">Fragment</span>顯示的<span lang="EN-US">Book</span>對象</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>BookContent.Book</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">void</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> onCreate(Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">super</span></strong><span lang="EN-US" style="font-family:宋體; color:black">.onCreate(savedInstanceState);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">如果啟動該<span lang="EN-US">Fragment</span>時包含了<span lang="EN-US">ITEM_ID</span>參數</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">if</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> (getArguments().containsKey(</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black"> = BookContent.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_MAP</span></em><span lang="EN-US" style="font-family:宋體; color:black">.get(getArguments()</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>.getInt(</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black">));</span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//①</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體">?</span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">重寫該方法,該方法返回的<span lang="EN-US">View</span>將作為<span lang="EN-US">Fragment</span>顯示的組件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> View onCreateView(LayoutInflater inflater</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>, ViewGroup container, Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">加載<span lang="EN-US">/res/layout/</span>目錄下的<span lang="EN-US">fragment_book_detail.xml</span>布局文件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>View rootView = inflater.inflate(R.layout.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">fragment_book_detail</span></em><span lang="EN-US" style="font-family:宋體; color:black">,</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>container,</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">false</span></strong><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">if</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> (</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black"> !=</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">null</span></strong><span lang="EN-US" style="font-family:宋體; color:black">)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_title</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">title</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_title</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">title</span><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">讓<span lang="EN-US">book_desc</span>文本框顯示<span lang="EN-US">book</span>對象的<span lang="EN-US">desc</span>屬性</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>((TextView) rootView.findViewById(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_desc</span></em><span lang="EN-US" style="font-family:宋體; color:black">))</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????????</span>.setText(</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">book</span><span lang="EN-US" style="font-family:宋體; color:black">.</span><span lang="EN-US" style="font-family:宋體; color:#0000C0">desc</span><span lang="EN-US" style="font-family:宋體; color:black">);<span style="">???</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">return</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> rootView;</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal"><span lang="EN-US">?</span></p></td></tr></tbody></table> ## 4.Fragmemt與Activity通信 為了在activity中顯示Fragment還必須將Fragment添加到activity中。 ### 4.1將Fragment添加到activity中有如下兩種方式: 1)在布局文件中添加:在布局文件中使用<fragment.../>元素添加Fragment,其中<fragment.../>的android:name屬性必須指定Fragment的實現類。 2)在Java代碼中添加:在Java代碼中通過FragmentTransaction對象的relpace()或add()方法來替換或添加Fragment。 提示:Activity的getFragmentManager()方法返回FragmentManager,通過調用FragmentManager的beginTransaction()方法獲取FragmentTransaction對象。 Activity的布局文件: <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:teal">&lt;?</span><span lang="EN-US" style="font-family:Consolas; color:#3F7F7F">xml</span><span lang="EN-US" style="font-family:Consolas"><span style="color:#7F007F">version</span><span style="color:black">=</span><em><span style="color:#2A00FF">"1.0"</span></em><span style="color:#7F007F">encoding</span><span style="color:black">=</span><em><span style="color:#2A00FF">"utf-8"</span></em><span style="color:teal">?&gt;</span></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">&lt;!--</span><span style="font-family:宋體; color:#3F5FBF">定義一個水平排列的</span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">LinearLayout</span><span style="font-family:宋體; color:#3F5FBF">,并指定使用中等分隔條</span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF"> --&gt;</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:teal">&lt;</span><span lang="EN-US" style="font-family:Consolas; color:#3F7F7F">LinearLayout</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">xmlns:android</span><span style="color:black">=</span><em><span style="color:#2A00FF">"http://schemas.android.com/apk/res/android"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:orientation</span><span style="color:black">=</span><em><span style="color:#2A00FF">"horizontal"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:layout_width</span><span style="color:black">=</span><em><span style="color:#2A00FF">"match_parent"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:layout_height</span><span style="color:black">=</span><em><span style="color:#2A00FF">"match_parent"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:layout_marginLeft</span><span style="color:black">=</span><em><span style="color:#2A00FF">"16dp"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:layout_marginRight</span><span style="color:black">=</span><em><span style="color:#2A00FF">"16dp"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:divider</span><span style="color:black">=</span><em><span style="color:#2A00FF">"?android:attr/dividerHorizontal"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">???</span><span style="color:#7F007F">android:showDividers</span><span style="color:black">=</span><em><span style="color:#2A00FF">"middle"</span></em><span style="color:teal">&gt;</span></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">&lt;!--</span><span style="font-family:宋體; color:#3F5FBF">添加一個</span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">Fragment --&gt;</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:Consolas; color:teal">&lt;</span><span lang="EN-US" style="font-family:Consolas; color:#3F7F7F">fragment</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:name</span><span style="color:black">=</span><em><span style="color:#2A00FF">"com.jph.fragmentdemo.BookListFragment"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:id</span><span style="color:black">=</span><em><span style="color:#2A00FF">"@+id/book_list"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_width</span><span style="color:black">=</span><em><span style="color:#2A00FF">"0dp"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_height</span><span style="color:black">=</span><em><span style="color:#2A00FF">"match_parent"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_weight</span><span style="color:black">=</span><em><span style="color:#2A00FF">"1"</span></em><span style="color:teal">/&gt;</span></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">&lt;!--</span><span style="font-family:宋體; color:#3F5FBF">添加一個</span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF">FrameLayout</span><span style="font-family:宋體; color:#3F5FBF">容器</span><span lang="EN-US" style="font-family:Consolas; color:#3F5FBF"> --&gt;</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:Consolas; color:teal">&lt;</span><span lang="EN-US" style="font-family:Consolas; color:#3F7F7F">FrameLayout</span><span lang="EN-US" style="font-family:Consolas"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:id</span><span style="color:black">=</span><em><span style="color:#2A00FF">"@+id/book_detail_container"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_width</span><span style="color:black">=</span><em><span style="color:#2A00FF">"0dp"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_height</span><span style="color:black">=</span><em><span style="color:#2A00FF">"match_parent"</span></em></span></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:Consolas"><span style="">??????</span><span style="color:#7F007F">android:layout_weight</span><span style="color:black">=</span><em><span style="color:#2A00FF">"3"</span></em><span style="color:teal">/&gt;</span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas; color:teal">&lt;/</span><span lang="EN-US" style="font-family:Consolas; color:#3F7F7F">LinearLayout</span><span lang="EN-US" style="font-family:Consolas; color:teal">&gt;</span></p></td></tr></tbody></table> Activity代碼: <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">class</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> SelectBookActivity</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">extends</span></strong><span lang="EN-US" style="font-family:宋體; color:black"><span style="background:silver">Activity</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">implements</span></strong><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>BookListFragment.Callbacks</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">void</span></strong><span lang="EN-US" style="font-family:宋體; color:black"><span style="background:silver">onCreate</span>(Bundle savedInstanceState)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">super</span></strong><span lang="EN-US" style="font-family:宋體; color:black">.onCreate(savedInstanceState);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">加載<span lang="EN-US">/res/layout</span>目錄下的<span lang="EN-US">main.xml</span>布局文件</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>setContentView(R.layout.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">main</span></em><span lang="EN-US" style="font-family:宋體; color:black">);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">實現<span lang="EN-US">Callbacks</span>接口必須實現的方法</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><span lang="EN-US" style="font-family:宋體; color:#646464">@Override</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span></span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">public</span></strong><span lang="EN-US" style="font-family:宋體; color:black"/><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">void</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> onItemSelected(Integer id)</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>{</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">創建<span lang="EN-US">Bundle</span>,準備向<span lang="EN-US">Fragment</span>傳入參數</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>Bundle arguments =</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">new</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> Bundle();</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>arguments.putInt(BookDetailFragment.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">ITEM_ID</span></em><span lang="EN-US" style="font-family:宋體; color:black">, id);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">創建<span lang="EN-US">BookDetailFragment</span>對象</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>BookDetailFragment fragment =</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">new</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> BookDetailFragment();</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">向<span lang="EN-US">Fragment</span>傳入參數</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>fragment.setArguments(arguments);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">使用<span lang="EN-US">fragment</span>替換<span lang="EN-US">book_detail_container</span>容器當前顯示的<span lang="EN-US">Fragment</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????</span>getFragmentManager().beginTransaction()</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???????????</span>.replace(R.id.</span><em><span lang="EN-US" style="font-family:宋體; color:#0000C0">book_detail_container</span></em><span lang="EN-US" style="font-family:宋體; color:black">, fragment).commit();<span style="">?</span></span><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//①</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black"><span style="">???</span>}</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal"><span lang="EN-US" style="font-family:宋體; color:black">}</span></p></td></tr></tbody></table> 上而的程序中①號粗體字代碼就調用了FragmentTransaction的replace()方法動態更新了 ID為book_detail_container容器(也就是前面布局文件中的FrameLayout容器)中顯示的 Fragment。 將Fragment添加到Activity之后,Fragment必須與Activity交互信息,這就需要Fragment能獲取它所在的Activity, Activity也能獲取它所包含的任意的Fragment。可按如下方法進行。 ### 4.2在activity中獲取Fragement,在Fragment中獲取activity的方法: 1)Fragment獲取它所在的Activity:調用Fragment的getActivity()方法即可返回它所在的Activity。 2)Activity獲取它包含的Fragment:調用 Activity關聯的 FragmentManager的 findFragmentByld(int id)或findFragmentByTag(String tag)方法即可獲取指定的 Fragment。 提示: 在界面布局文件中使用<fragment.../>元素添加Fragment時,可以為<fragment.../>元素指定android:id或android:tag屬性,這兩個屬性都可用于標識該 Fragment,接下來 Activity將可通過 findFragmentByld(int id)或 findFragmentByTag(String tag)來獲取該 Fragment。 ### 4.3Fragment與Activity可能還需要相互傳遞數據的方式: 1)Activity向Fragment傳遞數據:在Activity中創建Bundle數據包,并調用Fragment的setArguments(Bundle bundle)方法即可將 Bundle數據包傳給 Fragment。 2)Fragment向Activity傳遞數據或Activity需要在Fragment運行中進行實時通信:在Fragment中定義一個內部回調接口,再讓包含該Fragment的Activity實現該回調接口,這樣Fragment即可調用該回調方法將數據傳給Activity。 3)通過廣播的方式。 ## 5.Fragment 管理與 Fragment事務 前面介紹了 Activity與Fragment交互相關的內容,其實Activity管理Fragment主要依靠FragmentManger。 ### 5.1FragmentMange的功能: 1)使用 findFragmentByld()或 findFragmentByTag()方法來獲取指定 Fragment。 2)調用popBackStack()方法將Fragment從后臺找中彈出(模擬用戶按下BACK按鍵)。 3)調用addOnBackStackChangeListener()注冊個監聽器,用于監聽后臺棧的變化。如果需要添加、刪除、替換Fragment,則需要借助FragmentTransaction對象, FragmentTransaction 代表 Activity對 Fragment執行的多個改變。 提示: FragmentTransaction也被翻譯為Fragment事務。與數據庫事務類似的是,數據庫事務代表了對底層數組的多個更新操作;而Fragment事務則代表了Activity對Fragment執行的多個改變操作。 每個FragmentTransaction可以包含多個對Fragment的修改,比如包含調用多個add()、replace()、和remove()操作,最后調用commit()提交事務即可。 在調用commit()之前,開發者也可調用addToBackStack()將事務添加到back棧,該棧由Activity負責管理,這樣允許用戶按BACK按鍵返回到前一個Fragment狀態。 <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" width="568" style="width:426.1pt; margin-left:10.5pt; border-collapse:collapse; border:none"><tbody><tr style=""><td width="568" valign="top" style="width:426.1pt; border:solid green 1.0pt; padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">創建一個新的<span lang="EN-US">Fragment</span>并打開事務</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">Fragment newFragment =</span><strong><span lang="EN-US" style="font-family:宋體; color:#7F0055">new</span></strong><span lang="EN-US" style="font-family:宋體; color:black"> ExampleFragment();</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">FragmentTransaction transaction = getFragmentManager().beginTransaction();</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">替換該界面中<span lang="EN-US">fragment_container</span>容器內的<span lang="EN-US">Fragment</span></span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:black">transaction.replace(R.id.fragment_container, newFragment);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">將事務添加到<span lang="EN-US">back</span>棧,允許用戶按<span lang="EN-US">back</span>按鍵返回到替換<span lang="EN-US">Fragment</span>之前的狀態</span><span lang="EN-US" style="font-family:宋體; color:black">transaction.addToBackStack(null);</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal" align="left" style="text-align:left; text-autospace:none"><span lang="EN-US" style="font-family:宋體; color:#3F7F5F">//</span><span style="font-family:宋體; color:#3F7F5F">提交事務</span><span lang="EN-US" style="font-family:宋體"/></p><p class="MsoNormal"><span lang="EN-US" style="font-family:宋體; color:black">transaction.commit();</span></p></td></tr></tbody></table> 在上面的示例代碼中,newFragment替換了當前界面布局中ID為fragment_container的容器內的Fragment,由于程序調用了addToBackStack()將該replace操作添加到了back棧中,因此用戶可以通過按下BACK按鍵返回替換之前的狀態。 ## 6.Fragment的生命周期: 與Activity類似的是,Fragment也存在如下狀態。 ??活動狀態:當前Fragment位于前臺,用戶可見,可以獲得焦點。 ??暫停狀態:其他Activity位于前臺,該Fragment依然可見,只是不能獲得焦點。 ??停止狀態:該Fragment不可見,失去焦點。 ??銷毀狀態:該Fragment被完全刪除,或該Fragment所在的Activity被結束。 ![fragment的生命周期](https://box.kancloud.cn/2016-02-19_56c6aa37611e9.jpg) 從上圖可以看出,在Fragment的生命周期中,如下方法會被系統回調。 ??onAttach():當該Fragment被添加到Activity時被回調。該方法只會被調用一次。 ??onCreate(Bundle savedStatus):創建 Fragment時被回調。該方法只會被調用一次。 ??onCreateView():每次創建、繪制該Fragment的 View 組件時回調該方法,Fragment將會顯示該方法返回的 View組件。 ??onActivityCreated():當 Fragment所在的 Activity被啟動完成后回調該方法。 ??onStart():啟動 Fragment時被回調。 ??onResume():恢復 Fragment時被回調,onStart()方法后一定會回調()onResume()方法。 ??onPause():暫停Fragment時被回調。 ??onStop():停止Fragment時被回調。 ??onDestroyView():銷毀該 Fragment所包含的 View 組件時調用。 ??onDestroy():銷毀Fragment時被回調。該方法只會被調用一次。 ??onDetach():將該 Fragment從 Activity中被刪除、被替換完成時回調該方法,onDestroy()方法后一定會回調onDetach()方法。該方法只會被調用一次。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看