2012-04-02 82 views
4

我想知道是否有方法控制何時處理片段的生命週期時與FragmentPagerAdapter結合使用。如何控制片段和FragmentPagerAdapter的生命週期

我的目標是觸發當前可見碎片的AsyncTask,當用戶將其滑入視圖時。

到目前爲止,我只能創建一個應用程序,它在運行FragmentPagerAdapter代碼時,實例化所有我希望可用的碎片,以便一次性完成每個碎片的「完全啓動生命週期」 。

我希望Fragment的AsyncTask在Fragment進入視圖時被觸發,當視頻消失時將其取消。我試圖覆蓋每個片段上所有可用的回調,但是我還沒有找到回調或偵聽器,當顯示/未顯示特定片段時會作出反應。

我使用Android支持包V4和ViewPager作爲我的應用程序的基礎。

回答

3

您可能正在尋找.setOnPageChangedListener()-方法。請在您的適配器中撥打mViewPager.setOnPageChangedListener(new OnPageChangedListener() { ... })implement ViewPager.OnPageChangedListener(並設置mViewPager.setOnPageChangedListener(mAdapter))。

onPageSelected()-方法中,執行你的asynctask並取消任何先前的實例。這樣,當你的頁面(完全)可見時,你的asynctask將被執行。如果您想在用戶開始滾動時立即執行該操作,請改爲使用onPageScrollStatechanged()onPageScrolled()-方法。

例子:

viewPager.setOnPageChangeListener(new OnPageChangeListener() { 

    @Override 
    public void onPageScrollStateChanged(int state) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onPageSelected(int position) { 

     // check if asyncTask exists and is running; if so, cancel it. 
     if(mAsyncTask != null) { 

      if(mAsyncTask.getStatus() != AsyncTask.Status.FINISHED) { 
       mAsyncTask.cancel(true); // cancel asynctask if activity is destroyed before it's finished 
      } 

      mAsyncTask = null; 
     } 

     mAsyncTask = new MyAsyncTask().execute("myParam"); 
    } 

}); 
+0

這正是我所需要的東西。在點上! – 2012-04-02 17:55:12