我有一个使用片段和 ActionBarSherlock 构建的选项卡式应用程序。我有 3 个选项卡,有 3 个 ListFragment's 这就是正在发生的事情。
当我选择任何选项卡时,关联片段的 onCreate 方法会在第一次按预期调用,但不会在第二次调用。问题是下一个相邻选项卡调用了 onCreate 方法,但未选择选项卡。
单击 tab2 并调用 tab3 的 onCreate 但不调用 tab2。
实际上我的要求是,当我更改tab1中的一些数据时,意味着fragment1。这些更改在 fragment2 中不受影响,当我选择 tab2 (fragment2) 时,这意味着 fragment2 onCreate() 没有调用。为什么它没有正确刷新片段。这是我正在使用的适配器。
private class TabsAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener, ActionBar.TabListener {
public TabsAdapter(FragmentActivity activity, ActionBar actionBar, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = actionBar;
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(ActionBar.Tab tab, Class<?> clss, int tabId) {
mTabs.add(clss.getName());
mTabsId.add(tabId);
mActionBar.addTab(tab.setTabListener(this));
notifyDataSetChanged();
}
public Integer getIdForPosition(int position) {
if (position >= 0 && position < mTabsId.size()) {
return mTabsId.get(position);
}
return null;
}
@Override
public int getCount() {
return mTabs.size();
}
@Override
public Fragment getItem(int position) {
//TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, mTabs.get(position), new Bundle());
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Log.i(TAG, "*******tab selected*******" +tab);
clearDetails();
if (mViewPager.getCurrentItem() != tab.getPosition()) {
mViewPager.setCurrentItem(tab.getPosition(), true);
}
}
@Override
public void onPageSelected(int position) {
mActionBar.setSelectedNavigationItem(position);
if (mCurrentPosition == position) {
}
mNextPosition = position;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}