生活随笔
收集整理的這篇文章主要介紹了
关于fragment backstate的运用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這兩天在使用Fragment做播放器里的播放列表和歌詞顯示兩個界面的替換與更新時發現了很多問題,在此記錄下問題及解決方法:
1.多個Fragment在replace后(并且都加入了后退棧ft.addToBackStack(null)),通過點擊按鈕事件移除頂層的fragment(使用remove方法),返回后的fragment的oncreatview方法有執行,但是頁面仍然沒法自行更新數據,頁面空白,UI控件都消失了。
解決:不用remove方法,改用通過popBackStack()方法直接將棧頂的fragment彈出,然后直接恢復到要返回的那個fragment。
| 1 | getSupportFragmentManager().popBackStack(); |
2.使用popBackStack()方法后,頁面控件恢復了,但是數據并沒有同步更新。
解決:這個問題困擾了很久,后來講replace方法改成了add方法,并且在add之前將原先的fragment隱藏掉hide。這樣在點擊按鈕收回播放列表的fragment后,返回的歌詞fragment的顯示進度是同步的了。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 打開播放列表 private?void?btnClick_playinglist() { ????FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ????Fragment fragment =?new?PlayingListFragment(); ????if?(isOpenPlayingList)//播放類表是否已打開 ????{ ????????getSupportFragmentManager().popBackStack(); ????????mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist); ????????isOpenPlayingList =?false; ????} ????else ????{ ????????ft.hide(mFragment); ????????ft.add(R.id.playing_fragment_layout, fragment); ????????ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ????????ft.addToBackStack(null); ????????mFragment = fragment; ????????mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist_press); ????????isOpenPlayingList =?true; ????} ????ft.commit(); } |
3.通過按鈕點擊可以正常彈出頂層的播放列表fragment了,同時歌詞界面的fragment仍然同步更新。但是用按鈕點擊打開播放列表fragment,然后用back鍵返回,第一次正常,多次后歌詞fragment就開始變成空白。將fragment的背景顏色修改成紅色,異常界面就是紅色。由此可見,通過back鍵返回的fragment仍然沒有恢復和更新。
解決:這個不清楚具體原因,應該是使用back返回鍵和通過調用popBackStack()方法來移除fragment的機制不一樣所導致的。這個找不到具體的解決辦法,只能先采用規避方法,通過重寫back監聽方法,進而調用popBackStack()解決了這個問題。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //重寫監聽back鍵按鈕 @Override public?void?onBackPressed() { ????getSupportFragmentManager().popBackStack(); ????if?(isOpenPlayingList)//判斷播放列表是否打開 ????{ ????????mPlaying_img_openlist.setImageResource(R.drawable.icon_playing_img_openlist); ????????isOpenPlayingList =?false; ????} ????else ????{ ????????super.onBackPressed(); ????} } |
總結
以上是生活随笔為你收集整理的关于fragment backstate的运用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。