2012-04-02 13 views
4

FragmentPagerAdapterと組み合わせてフラグメントのライフサイクルを処理する方法を制御する方法があるかどうかを判断しようとしています。フラグメントとFragmentPagerAdapterのライフサイクルを制御するには

私の目標は、現在表示されているフラグメントのAsyncTaskをユーザーが表示にスワイプしたときにトリガーすることです。

現在のところ、FragmentPagerAdapterコードを実行すると、すべてのフラグメントの「完全起動ライフサイクル」を一度に完了したいと思うすべてのフラグメントをインスタンス化するアプリケーションを作成することしかできませんでした。

Fragmentが表示されたときにFragmentのAsyncTaskがトリガーされ、Fragmentが表示外になったときにFarmentがキャンセルされるようにしたいと思います。私はすべての利用可能なコールバックをすべてのフラグメントでオーバーライドしようとしましたが、特定のフラグメントが表示されているか表示されていないときに反応するコールバックまたはリスナーはまだ見つかりません。

私はアプリケーションのベースとしてViewPagerを使用してAndroidサポートパッケージv4を使用しています。

答えて

3

あなたはおそらく.setOnPageChangedListener()の方法を探しています。アダプタにmViewPager.setOnPageChangedListener(new OnPageChangedListener() { ... })またはimplement ViewPager.OnPageChangedListenerと電話するか、mViewPager.setOnPageChangedListener(mAdapter)に設定してください。

onPageSelected() -methodでは、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

私がまさに必要でした。右のドット! –

関連する問題