【问题标题】:Fragment not created before being passed to FragmentPagerAdapter.setPrimaryItem()在传递给 FragmentPagerAdapter.setPrimaryItem() 之前未创建片段
【发布时间】:2016-08-30 21:38:59
【问题描述】:

我在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 Support Library 23.2.1 更新到Android Support Library 24.2.0 才成为问题。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我已在 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多