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 方法,我太弱了什麼都不會

哭哭

 

 

arrow
arrow
    創作者介紹
    創作者 Master Sarge 的頭像
    Master Sarge

    Master Sarge 的部落格

    Master Sarge 發表在 痞客邦 留言(0) 人氣()