gpt4 book ai didi

android - LoaderCallbacks.onLoadFinished() 从未调用过 FragmentPager?

转载 作者:行者123 更新时间:2023-11-29 14:33:28 25 4
gpt4 key购买 nike

我正在使用 FragmentPagerAdapter 来实现选项卡式界面。我的第 0 个 fragment 在创建时创建了一个加载器,并尝试在 onActivityCreated() 中重新连接到加载器。这是类(class):

public class My0thFragment extends Fragment {
private boolean ranOnce = false;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}

@Override
public void onActivityCreated() {
if (!ranOnce) {
// if the first time we're being created, do an initial load of data.
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
ranOnce = true;
} else {
// reconnect?
getLoaderManager().initLoader(500, null, mMyCallback);

// sanity check.
printAllLoaders(getLoaderManager());
}
}

private LoaderManager.LoaderCallbacks<Foo> mMyCallback = new LoaderManager.LoaderCallbacks<Foo>() {
@Override
public Loader<Foo> onCreateLoader(int arg0, Bundle arg1) {
return new FooLoader(getActivity(), arg1);
}

@Override
public void onLoadFinished(Loader<Foo> arg0, Foo arg1) {
Log.e(tag, "onLoadFinished()!");
}

@Override
public void onLoaderReset(Loader<Foo> arg0) {
Log.e(tag, "onLoaderReset()!");
}
};
}

场景如下:

  1. 应用程序启动,第 0 个 fragment 在 FragmentPagerAdapter 中创建。
  2. 调用 onActivityCreated() 方法,在第一次运行时创建并启动加载器。
  3. 在加载程序完成之前,我快速切换到另一个选项卡。
  4. 我可以通过日志看到加载程序已完成,但我的回调从未获得 onLoadFinished() 回调。我认为这是因为 fragment 处于某种分离状态,具体取决于 FragmentPagerAdapter 的工作方式。
  5. 返回到第 0 个选项卡,我看到调用了 onActivityCreated(),并且再次调用了 initLoader() 方法。回调仍然没有触发。
  6. 此时我可以在加载器管理器中打印所有加载器,并看到我的加载器仍然位于加载器管理器中。

所以我被困在这里了,我一定是做错了什么,因为 Loader 的设计一定是为了让我们这些开发人员在考虑 fragment 生命周期的情况下易于使用。谁能指出我在这里做错了什么?

谢谢

最佳答案

可能你有两个相同 fragment 的实例,尝试在销毁 fragment 上销毁加载器:

protected void onDestroy() {
  if (getSupportLoaderManager().getLoader(0) != null) {
           getLoaderManager().getLoader(0).abandon();
           getSupportLoaderManager().destroyLoader(0);
  }
   super.onDestroy();
}

关于android - LoaderCallbacks.onLoadFinished() 从未调用过 FragmentPager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301682/

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