我正在试图弄清楚当与FragmentPagerAdapter结合使用时,是否有一种控制片段生命周期的方法。
我的目标是在用户将其滑入视图时触发当前可见片段的AsyncTask。
截至目前,我只能创建一个应用程序,当运行FragmentPagerAdapter代码时,实例化我希望可用的所有片段,同时完成每个片段的“完整启动生命周期”。
我希望Fragment的AsyncTask在Fragment进入视图时被触发,当它离开视图时取消它。我试图覆盖每个片段上的所有可用回调,但我还没有找到一个回调或监听器,当显示/未显示特定片段时会做出反应。
我正在使用Android支持包v4,并将ViewPager作为应用程序的基础。
答案 0 :(得分: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");
}
});