当为我的Android应用程序实例化Activity时,还会创建ViewPager和FragmentPagerAdpter。
最初创建Tab1的Fragment1。当为Fragment1调用onCreateView()时,ActionBar也会膨胀并设置为当前活动。到现在为止还挺好。 Android设备上的显示效果很好。
当用户按下"添加" ActionBar上的按钮,Tab2的Fragment2如上所述创建。我可以在两个标签之间来回滑动。并且ActionBar在Tab1 / 2上显示正常。
添加新片段时,会将其添加到ArrayList,并调用FragmentPagerAdapter.notifyDataSetChanged()。这样可以显示新的Tab。
然而,在为Tab3添加Fragment3之后,当我滑动它时,ActionBar没有显示。但Tab3的Fragment3清晰可见。当我滑回Fragment2时,ActionBar会出现。当我向后滑动到Fragment3时,ActionBar再次消失。
当我为Tab4添加Fragment4时,当我向它滑动时,ActionBar再次消失。但是现在ActionBar显示了Tab3的Fragment3,而当它是最后一个Fragment时则不是这样。
因此,当动态添加3个或更多片段时,ActionBar不会显示最后一个片段。对于这种情况,ActonBar也没有出现在第一个Fragent上。
跟踪调用后,当我滑动到第一个或最后一个片段并且未显示ActionBar时,会调用onPause()方法。对于ActionBar显示正常的中间片段,当我滑动到其中一个时,会调用onCreateView()方法。
我对上面与Fragments的ActionBar显示相关的不一致行为感到非常困惑。我不确定为什么在第一个/最后一个片段上调用onPause()是最新的片段。这似乎是没有显示ActionBar的罪魁祸首。
以下是一些代码段:
public class MyApp extends Activity {
protected void onCreate(Bundle icicle) {
....
ViewPager viewPager;
TabsPagerAdapter mAdapter;
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
....
}
public class TabsPagerAdapter extends FragmentPagerAdapter
implements ViewPager.OnPageChangeListener {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
....
public class MyFragment extends Fragment implements {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
.....
View actionBarButtons =
inflater.inflate(R.layout.actionbar,
new LinearLayout(mActivity), false);
... add buttons here....
mActivity.getActionBar().setCustomView(actionBarButtons);
.....
}