gpt4 book ai didi

android - 如何控制 Fragment 和 FragmentPagerAdapter 的生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:48 24 4
gpt4 key购买 nike

我想弄清楚在与 FragmentPagerAdapter 结合使用时是否有一种方法可以控制何时处理 Fragment 的生命周期。

我的目标是在用户将其滑动到 View 中时触发当前可见 fragment 的 AsyncTask。

截至目前,我只能创建一个应用程序,当运行 FragmentPagerAdapter 代码时,它会实例化我希望立即完成每个 fragment 的“完整启动生命周期”的所有 fragment 。

我希望 Fragment 的 AsyncTask 在 Fragment 进入 View 时被触发,在它离开 View 时取消它。我试图覆盖每个 fragment 上的所有可用回调,但我还没有找到在显示/未显示特定 fragment 时使用react的回调或监听器。

我正在使用带有 ViewPager 的 Android 支持包 v4 作为我的应用程序的基础。

最佳答案

您可能正在寻找 .setOnPageChangedListener() 方法。在您的适配器中调用 mViewPager.setOnPageChangedListener(new OnPageChangedListener() { ... })实现 ViewPager.OnPageChangedListener(并设置 mViewPager.setOnPageChangedListener(mAdapter) )。

onPageSelected() 方法中,执行您的异步任务并取消任何先前的实例。这样,您的异步任务将在您的页面(完全)可见时执行。如果您想在用户开始滚动时立即执行它,请改为操作 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");
}

});

关于android - 如何控制 Fragment 和 FragmentPagerAdapter 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9974029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com