android - 在传递给 FragmentPagerAdapter.setPrimaryItem() 之前未创建 fragment

标签 android android-fragments android-support-library fragmentpageradapter

我在 FragmentPagerAdapter 中有以下逻辑

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object);
    MyFragment myFragment = (MyFragment) object;
    myFragment.onPrimaryItemSet();
}

其中 MyFragment 是一个支持 Fragmentandroid.support.v4.app.Fragment

问题是 myFragment.onPrimaryItemSet() 需要 Fragment 的 onCreate() 方法设置的实例数据,直到我最近从 Android 支持库 23.2.1Android 支持库 24.2.0

我回头发现,从 Android Support Library 24.0.0 开始,FragmentPagerAdapter.setPrimaryItem() 始终在 onCreate() 之前被调用> 作为 Object 参数传递的 Fragment。而在 Android Support Library 23.4.0 及之前的版本中,Fragment 总是首先创建。

我通读了 documentationrevision history , 但在调用 setPrimaryItem() 时找不到任何明确描述 fragment 状态的契约(Contract)。因此,这很可能是支持库中的错误。

有人对此特定问题有任何解决方案/解决方法吗?谢谢!

最佳答案

我已经提交了 this issue在 AOSP 问题跟踪器中,我正在使用以下解决方法,直到找到更好的解决方案:

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

private void extractArguments() {
    Bundle args = getArguments();
    feature = args.getParcelable(ARG_FEATURE);
}

public void onPrimaryItemSet() {
    if (feature == null) {
        extractArguments();
    }
    // business logic
}

关于android - 在传递给 FragmentPagerAdapter.setPrimaryItem() 之前未创建 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237498/

相关文章:

java - 单一生产者单一消费者现在我需要多个消费者

android - ListFragment "content view not yet created"旋转

java - 在运行时更新 Activity 的 fragment , View 变量不是全局的

android - 在 viewpager 中显示 Youtube 视频

android - minifiedEnabled 导致渲染脚本崩溃 >Kitkat

android - 使用 Kotlin 将多个 OnClickListener 添加到 RecyclerView

android - 是否可以将所有应用程序的数据存储在 sdcard 中?

android - onBackPressed() 应用程序未关闭

java - Android 在使用 Eclipse 导入库项目时出现问题

android - 如何使用 appCompat 22.1 及更高版本中的新 AlertDialog 并为其设置样式