我在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
之前和之前,片段始终是先创建的。
我通读了documentation和revision history,但在调用Android Support Library 23.4.0
时找不到任何明确描述片段状态的合约。因此,这很可能是支持库中的一个错误。
是否有人对此特定问题有任何解决方案/解决方法?谢谢!
答案 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
}