У меня есть приложение с вкладками, построенное с фрагментами и ActionBarSherlock. У меня 3 вкладки, с 3 ListFragment Вот что происходит.onCreateView не вызывается для вкладок в панели действий TabsAdapter для второй вкладки времени выбран?
Когда я выбираю любую вкладку, метод onCreate для связанного фрагмента вызывается как ожидается в первый раз, но не во втором. Проблема заключается в том, что метод onCreate вызывается для следующей соседней вкладки, но не для выбранной вкладки.
Щелкните по tab2 и onCreate tab3 вызывается, но не tab2.
Фактически мое требование, когда я изменяю некоторые данные в tab1, означает фрагмент1. эти изменения не выполняются в фрагменте2, когда я выбираю tab2 (фрагмент2), это означает, что фрагмент2 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) {
}
я установить этот параметр в моем ViewPager mViewPager.setOffscreenPageLimit (0); хотя это не работает для меня. –
Тогда вам может понадобиться использовать обработчик событий, чтобы заставить эти фрагменты обновляться при вводе в поле зрения.Кроме того, вы можете принудительно создать абсолютно новый экземпляр фрагмента, который будет создан каждый раз в обработчике событий onTabSelected. – majormajors
Я уже делаю это @Override public void onTabSelected (вкладка Tab, FragmentTransaction ft) { Log.i (TAG, вкладка ******* выбрана ******* "+ tab); clearDetails(); if (mViewPager.getCurrentItem()! = Tab.getPosition()) { mViewPager.setCurrentItem (tab.getPosition(), true); } } in onTabSelected() Посмотрите на мой код, что я должен делать дальше этого, чтобы нормально работать. –