ViewPager/FragmentPageAdapter,重新创建后,不调用上次选择的视图的 onCreate()
ViewPager/FragmentPageAdapter, after recreation, does not call onCreate() of last selected view
我目前正在开发一个应用程序,其中一个片段内有 ActionBar 选项卡(主导航是 NavigationDrawer)。片段的 onCreate()
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
actionBar = activity.getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Resources r = getResources();
//(…) tabNames initialization
adapter = new CustomTabAdapter(getFragmentManager());
}
和onCreateView()
:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment, container, false);
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(this);
for (String tabName : tabNames) {
actionBar.addTab(actionBar.newTab()
.setText(tabName)
.setTabListener(this));
}
return rootView;
}
有 4 个选项卡,每个选项卡都有自己的片段和布局。 CustomTabAdapter
returns 其 getItem(int)
中正确片段的新实例。有 4 个选项卡。
现在我的问题是:
- 我启动应用程序。
- 我从 NavigationDrawer 列表中选择了这个选项卡片段。一切正常。
- 我从 NavigationDrawer 列表中选择了另一个片段,这意味着选项卡片段已被替换。
- 我再次选择标签片段。在从 NavigationDrawer 列表中选择另一个片段之前选择的与选项卡相关的片段,并且不会重新创建与之相邻的片段(ActionBar 选项卡下的空白屏幕)。我检查了那些片段的
onCreateView(…)
方法没有被调用。因此,在更改设备方向或选择不相邻的选项卡后,将再次显示正确的布局。
我怎样才能让它正常工作(在从 NavigationDrawer 列表重新进入选项卡片段时显示正确的布局而不是空白 space)?我运行没主意了。
它从缓存中获取片段而不重新创建
终于找到了解决办法。我的 CustomTabAdapter
是 FragmentPagerAdapter
的扩展。我将其更改为 FragmentStatePageAdapter
的扩展,现在重新创建了片段。
@Louth this answer 中的更多详细信息。
我目前正在开发一个应用程序,其中一个片段内有 ActionBar 选项卡(主导航是 NavigationDrawer)。片段的 onCreate()
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
actionBar = activity.getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Resources r = getResources();
//(…) tabNames initialization
adapter = new CustomTabAdapter(getFragmentManager());
}
和onCreateView()
:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment, container, false);
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(this);
for (String tabName : tabNames) {
actionBar.addTab(actionBar.newTab()
.setText(tabName)
.setTabListener(this));
}
return rootView;
}
有 4 个选项卡,每个选项卡都有自己的片段和布局。 CustomTabAdapter
returns 其 getItem(int)
中正确片段的新实例。有 4 个选项卡。
现在我的问题是:
- 我启动应用程序。
- 我从 NavigationDrawer 列表中选择了这个选项卡片段。一切正常。
- 我从 NavigationDrawer 列表中选择了另一个片段,这意味着选项卡片段已被替换。
- 我再次选择标签片段。在从 NavigationDrawer 列表中选择另一个片段之前选择的与选项卡相关的片段,并且不会重新创建与之相邻的片段(ActionBar 选项卡下的空白屏幕)。我检查了那些片段的
onCreateView(…)
方法没有被调用。因此,在更改设备方向或选择不相邻的选项卡后,将再次显示正确的布局。
我怎样才能让它正常工作(在从 NavigationDrawer 列表重新进入选项卡片段时显示正确的布局而不是空白 space)?我运行没主意了。
它从缓存中获取片段而不重新创建
终于找到了解决办法。我的 CustomTabAdapter
是 FragmentPagerAdapter
的扩展。我将其更改为 FragmentStatePageAdapter
的扩展,现在重新创建了片段。
@Louth this answer 中的更多详细信息。