天天看點

談談安卓的fragment動态替換

 本文主要談談碎片動态替換時出現初始界面任然存在的問題,并提出解決方案,由于本人也是初學,知識水準有限,至于原因目前還不得而知,但是問題能夠很好解決,如有大神知道原理,歡迎在評論區指出。

前段時間正在寫一個專業軟體,基于《第一行代碼》這本書的啟發,我打算利用碎片知識寫兩個布局,一個用于普通安卓手機,另一個用于平闆,平闆布局的基本構思如下圖。左邊為按鈕區域,右邊為功能區域,點選不同按鈕顯示不同界面。

談談安卓的fragment動态替換

但是最開始的時候得到的結果出現了一點小問題,話不多說,直接上圖。

談談安卓的fragment動态替換
談談安卓的fragment動态替換

注意左圖和右圖的差別,右邊圖檔為剛啟動時候,沒有點選任何按鈕時狀态,顯示正常,左邊圖檔為點選其他按鈕過後的狀态,沒錯,按鈕上移了,但是我檢查了我的代碼并沒有更改布局的代碼。

最開始我以為是當機了,但是添加按鈕點選監聽能夠監聽到點選事件,說明我的猜想錯位。

然後我有換了一些布局,發現布局還是會上移,如圖。

談談安卓的fragment動态替換
談談安卓的fragment動态替換

左圖正常,有圖為點選按鈕後的效果,是以我推測是最開始的碎片并沒有消除,我最開始的解決方案是碎片最開始的android:name的值為空,當然《第一行代碼》裡面就是這樣做的,但是現在好像不能這樣了,如果為空,編譯器會報錯,編譯不通過,我的解決方案就是寫一個布局,隻是包含一個layout,尺寸為0,作為他的初始布局,這樣不就解決了嗎,如圖

談談安卓的fragment動态替換

運作效果,左圖為啟動初始界面,右圖為點選按鈕後界面,而且多次點選過後也并沒出現剛才問題了。

談談安卓的fragment動态替換
談談安卓的fragment動态替換

      結論:動态替換碎片的時候,初始預設碎片有的時候并不會消失,這個時候用一個尺寸均為0的布局作為預設布局就可以解決了,至于為什麼會出現這樣問題我還不得而知,希望各位大神能指點一二。