我在 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()
需要 Fragment 的 onCreate()
方法设置的实例数据,直到我最近从 Android 支持库 23.2.1
到 Android 支持库 24.2.0
。
我回头发现,从 Android Support Library 24.0.0
开始,FragmentPagerAdapter.setPrimaryItem()
始终在 onCreate()
之前被调用> 作为 Object
参数传递的 Fragment。而在 Android Support Library 23.4.0
及之前的版本中,Fragment 总是首先创建。
我通读了 documentation和 revision 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/