每次使用ViewPager+Fragment來作為app的框架的時(shí)候都要格外小心,因?yàn)樗麄兊纳芷谟悬c(diǎn)奇怪,并沒有Activity那樣來得自然。如何奇怪呢,請看下面日志打開app,一開始為第一個(gè)Fragment02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=true02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onAttach02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreate02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onAttach02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreate02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreateView02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onActivityCreated02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment2{5434690 #0 id=0x7f0c0056 android:switcher:2131492950:1} not updated inline; expected state 3 found 202-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreateView02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onActivityCreated02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStart02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onResume02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStart02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onResume切換到第二個(gè)Fragment02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=false02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=true02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onAttach02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onCreate02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onCreateView02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onActivityCreated02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment3{863ec84 #2 id=0x7f0c0056 android:switcher:2131492950:2} not updated inline; expected state 3 found 202-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onStart02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onResume切換到第三個(gè)Fragment02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=false02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=true02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onAttach02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onCreate02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onPause02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStop02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onDestroyView02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onCreateView02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onActivityCreated02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment4{6fa481c #3 id=0x7f0c0056 android:switcher:2131492950:3} not updated inline; expected state 3 found 202-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onStart02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onResume切換到第四個(gè)Fragment02-09 14:05:30.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=false02-09 14:05:30.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=true02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onPause02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStop02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onDestroyView最后且回到第一個(gè)Fragment02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=true02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreateView02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onActivityCreated02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStart02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onResume02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreateView02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onActivityCreated02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment2{5434690 #0 id=0x7f0c0056 android:switcher:2131492950:1} not updated inline; expected state 3 found 202-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStart02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onResume02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onPause02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onStop02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onDestroyView02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onPause02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onStop02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onDestroyView一般createView都是一次就行了,因?yàn)橛袝r(shí)候請求網(wǎng)絡(luò)啊,或者一些數(shù)據(jù)已經(jīng)改變了,后來再切回來就恢復(fù)了初始狀態(tài)。Android官方為了性能,做了這樣的靈活設(shè)置,切換到下一個(gè)fragment的時(shí)候會預(yù)加載相鄰的Fragment,然后把不相鄰的都銷毀掉,切回被銷毀掉的Fragment的時(shí)候又會重新createView一次。這樣做可能性能得到提高,可是實(shí)際開發(fā)中卻顯得有點(diǎn)不方便,也許是我沒有領(lǐng)會到更高級的寫法。那么我只想要他們老老實(shí)實(shí)的像Activity一樣怎么辦呢?這就是這篇文章的目的解決辦法:具體情況看我寫的這個(gè)demo,自定義了一個(gè)Fragment的超類BaseFragment,只要繼承這個(gè)BaseFragment,不要復(fù)寫生命周期,復(fù)寫幾個(gè)方法就可以了。使用情況請看上面的注釋。![]()
下載地址:http://download.csdn.net/detail/u014736095/9750716很多時(shí)候開發(fā)者我為了方便使用了show和hind的方法去控制他們,因?yàn)檫@樣可以解決viewpager的預(yù)加載問題。但是這樣沒有切換動畫,如重Fragment1切換到Fragment4,用show和hind就不會按照1.2.3-->4這樣的切換動畫,而是1-->4。
新聞熱點(diǎn)
疑難解答