AsyncTask 是拿來做網路的部分
一直以來的做法是當作inner class的角色
今天寫在fragment裡面,又要可以反覆trigger,麻煩就來了
以下為蝦掰前提狀況:
有個Activity exampleAppleActivity
包含了三個fragment BeeFragment, CatFragment, DogFragment
第一次要show某個fragment的時候
先判斷是否為null
不是null的話我們就用舊的
是的話就new 一個新的出來
當要叫出BeeFragment的時候
就把CatFragment 和 DogFragment hide()
BeeFragment show()
當要叫出CatFragment 的時候
就把BeeFragment 和 DogFragment hide()
CatFragment show()
三個fragment 用hide() 和 show() 的方法可以重複切來切去,切切切,好開心可以跳到想要的fragment頁面,又省資源
今天CatFagment大概長這樣
public class CatFragment extends Fragment {
@Override
public void OnCreateView(){
....
....
new LodaingDataAsyncTask.execute();
}
....
public LodaingDataAsyncTask extends AsyncTask<Object, void, void> {
}
}
所以當CatFagment 第一次被instance的時候會啟動LodaingDataAsyncTask ~
那下一次切到CatFagment 的頁面的時候勒?
不會再啟動LodaingDataAsyncTask 了
因為CatFagment 的OnCreateView 只會在instance的時候用一次
所以怎麼辦
試過一下方式:
1. 把 call LodaingDataAsyncTask 的地方寫在 OnResume() => 結果切換fragment怎麼都不會跑到OnResume()裡面GG
2. LodaingDataAsyncTask 放在外面當一般的class =>有夠難用的,裏面我還要塞globalVariable的資料 ,恩~其實就是cookie ,不弄成inner class的方式我真的活不下去
3. detect 這個fragment call show() 或hide() method => 好像沒有找到適合的方法去detect這個~"~
結果:
在show的時候,重複 new inner class 就好啦Orz
if( catFragment == null ) {
CatFragment catFragment = new CatFragment ();
transaction.add( R.id.index_framelayout, catFragment);
} else {
transaction.show(catFragment );
CatFragment.new LodaingDataAsyncTask.execute();
}
其實也就是JAVA 原生的 new inner class 方法,我太弱了什麼都不會
哭哭