我想弄清楚当碎片和一个碎片pageradapter组合在一起时,是否有方法控制碎片的生命周期。
我的目标是在用户将当前可见片段扫入视图时触发该片段的异步任务。
到目前为止,我只能创建一个应用程序,当运行fragmentpageradapter代码时,它将实例化我希望能够立即完成每个片段的“完整启动生命周期”的所有片段。
我希望片段的异步任务在片段进入视图时触发,在片段离开视图时取消它。我试图覆盖每个片段上的所有可用回调,但还没有找到在显示/未显示特定片段时作出反应的回调或侦听器。
我使用android支持包v4和viewpager作为应用程序的基础。
最佳答案
您可能正在寻找.setOnPageChangedListener()
-方法。在适配器中调用mViewPager.setOnPageChangedListener(new OnPageChangedListener() { ... })
或implement ViewPager.OnPageChangedListener
(并设置mViewPager.setOnPageChangedListener(mAdapter)
)。
在onPageSelected()
-方法中,执行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");
}
});