Вот структура моей AppViewPager пробел после слова из списка DrawerLayout
HomeActivity заменяет contentArea либо TransScreen или FlowScreen. Оба являются фрагментами (поддержка v4).
- HomeActivity (drawerlayout содержащий contentArea frameLayout + ListView меню)
- TransScreen (фрагмент с ViewPager + ActionBar вкладок)
- InListFragment (ListFragment)
- OutListFragment (ListFragment)
- FlowScreen (фрагмент)
- TransScreen (фрагмент с ViewPager + ActionBar вкладок)
Когда приложение запускается, TransScreen является экраном по умолчанию - я вижу списки - здесь все хорошо. Переключитесь с меню ящика на FlowScreen, это тоже хорошо. Теперь, когда я переключусь на TransScreen, я вижу вкладки, но пустой контент в ViewPager (а не «пустое» сообщение или listView).
Пробовал отладки, на первый рендер TransScreen, я вижу метод GetItem адаптера в ViewPager в (производный от FragmentStatePagerAdapter) называется (стек вызовов начинается с ViewPager.populate()) Но при переходе на другой экран и обратно, вызывается TransScreen :: onCreateView(), но последующие вызовы getItem не запускаются.
Вот что выглядит TransScreen onCreateView как:
псевдокоде onCreateView()
_tabsPager = new ViewPager(activity); // from getActivity()
_tabsPager.setId(R.id.transactionsTabCarousel);
_tabsPager.setAdapter(_tabsAdapter);
_tabsPager.setOnPageChangeListener(syncSelectedActionBarTabOnPageSelectListener());
ActionBar actionBar = activity.getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
TabListener tabListener = getSyncPagerOnTabSelectListener();
actionBar.addTab(createActionTab(actionBar, tab1Text, tabListener));
actionBar.addTab(createActionTab(actionBar, tab2Text, tabListener));
Log.d(TAG, "onCreate end!");
return _tabsPager;
_tabsAdapter создается в OnCreate() и делает поиск во внутреннем массиве фрагмента во время GetItem (положение). Однако getItem кажется, что вызывается в первый раз, а не после того, как я переключусь на этот экран через меню drawerLayout - pullout.
public TransactionTabsAdapter(FragmentManager fm) {
super(fm);
try {
_fragments = new Fragment[2];
_fragments[0] = new InListFragment();
_fragments[1] = new OutListFragment();
} catch (Exception e) {
Log.e(TAG, "TabsAdapter ctor", e);
}
}
Никаких исключений в LogCat.
Пробная передача в getChildFragmentManager к вкладкамAdapter внутри фрагмента первого уровня TransScreen. Нет кубиков.
Еще одно обновление:
Таким образом, чтобы исключить возможность того, что я перепутались в TransScreen.Я скачал код для следующего андроида образца http://developer.android.com/samples/SlidingTabsColors/index.html
Я тогда замещенный TransScreen с SlidingTabsColorFragment()
HomeActivity: OnCreate
...
_screens = new Fragment[]{
new SlidingTabsColorsFragment(), //new TransactionsScreen()
new CashFlowScreen() };
setScreen(0);
}
private void setScreen(int position) {
try {
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.replace(R.id.contentArea, _screens[position])
.commit();
_drawerMenu.setItemChecked(position, true);
_drawerLayout.closeDrawer(_drawerMenu);
} catch (Exception e) {
Log.e(TAG, "setScreen via Drawer Menu", e);
}
}
Такая же проблема воспроизводимым - и с трассировкой стека
: threadid=1: thread exiting with uncaught exception (group=0x41be52a0)
: FATAL EXCEPTION: main
: java.lang.IllegalStateException: No activity
: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
: at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884)
: at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514)
: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
: at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
: at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
: at android.os.Handler.handleCallback(Handler.java:615)
: at android.os.Handler.dispatchMessage(Handler.java:92)
: at android.os.Looper.loop(Looper.java:137)
: at android.app.ActivityThread.main(ActivityThread.java:4921)
: at java.lang.reflect.Method.invokeNative(Native Method)
: at java.lang.reflect.Method.invoke(Method.java:511)
: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
: at dalvik.system.NativeStart.main(Native Method)
вот решение -> http://stackoverflow.com/questions/16600156/fragment-in-viewpager-not-restored-after-popbackstack?rq=1 –