片段在传递给FragmentPagerAdapter.setPrimaryItem()之前未创建

时间:2016-08-30 21:38:59

标签: 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是支持Fragment,即android.support.v4.app.Fragment

问题是,myFragment.onPrimaryItemSet()需要片段onCreate()方法设置的实例数据,直到我最近从Android Support Library 23.2.1更新为{{1}才出现这个问题。 }}。

我回过头来发现从Android Support Library 24.2.0开始,Android Support Library 24.0.0始终在片段的FragmentPagerAdapter.setPrimaryItem()之前被调用作为onCreate()参数传递。而在Object之前和之前,片段始终是先创建的。

我通读了documentationrevision history,但在调用Android Support Library 23.4.0时找不到任何明确描述片段状态的合约。因此,这很可能是支持库中的一个错误。

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

1 个答案:

答案 0 :(得分:0)

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

@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
}