Android 在传递到FragmentPagerAdapter.setPrimaryItem()之前未创建片段
我在一个Android 在传递到FragmentPagerAdapter.setPrimaryItem()之前未创建片段,android,android-fragments,android-support-library,fragmentpageradapter,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(
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支持库23.2.1
更新到Android支持库24.2.0
,这才成为问题
我回去后发现,从Android Support Library 24.0.0开始,FragmentPagerAdapter.setPrimaryItem()
始终在作为对象
参数传递的片段的onCreate()
之前被调用。而在Android Support Library 23.4.0及之前的版本中,始终首先创建片段
我通读了and,但找不到任何明确描述调用setPrimaryItem()
时片段状态的约定。因此,这很可能是支持库中的一个bug
是否有人对此问题有任何解决方案/变通方法?谢谢 我已在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
}