There is a MainActivity in it there are fragments ( DrawerMenu ), in one of them there is a section of the History, which contains 4 more fragments supported by a ViewPagerAdapter (tabs). So, after clearing the memory on Kit Kat, MainActivity recreated along with all the rest of good. If you use only 1 tab then everything seems fine, but after you have run the entire program several times, then something like this appears in the logs:
Create MainActivity Create HsitoryFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment Create PopularFragment In DrawerMenu, fragments use .replace (), I also check for creation by tag. Apparently this is a problem with tabs, but the question is how to correct the situation?
MainActivity
onSaveInstanceState
protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); getSupportFragmentManager().putFragment(outState, "fragment" + sharedPreferences.getInt("FRAGMENT", 0), myFragment); } onCreate
if (savedInstanceState == null) { setFragment(sharedPreferences.getInt("FRAGMENT", 0)); } else { myFragment = getSupportFragmentManager().getFragment( savedInstanceState, "fragment" + sharedPreferences.getInt("FRAGMENT", 0)); getSupportFragmentManager().beginTransaction().replace(R.id.fragment, myFragment).commit(); } Call Fragment (DrawerMenu)
public void setFragment(int position) { fragmentManager = getSupportFragmentManager(); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); if(fragmentManager.findFragmentByTag("fragment" + position) != null) { myFragment = fragmentManager.findFragmentByTag("fragment" + position); fragmentTransaction.replace(R.id.fragment, myFragment); fragmentTransaction.commit(); return; }else { switch (position) { case 0: myFragment = new FragmentHistory(); break; case 1: myFragment = new FragmentGroup(); break; case 2: myFragment = new FragmentDialogs(); break; case 3: myFragment = new FragmentUsers(); break; } sharedPreferences.edit().putInt("FRAGMENT", position).apply(); fragmentTransaction.replace(R.id.fragment, myFragment, "fragment" + position); fragmentTransaction.commit(); } } Fragmenthistory
public void setupTubs ()
public void setupTabs() { tabsHistoryViewPagerAdapter = new TabsHistoryViewPagerAdapter(getFragmentManager(), titles, tabNumber); pager = (ViewPager) view.findViewById(R.id.pager); pager.setAdapter(tabsHistoryViewPagerAdapter); tabs = (SlidingTabLayout) view.findViewById(R.id.tabs); tabs.setDistributeEvenly(false); tabs.setViewPager(pager); } TabsHistoryViewPagerAdapter
getItem ()
@Override public Fragment getItem(int position) { TabHistoryPopular tabHistoryPopular = new TabHistoryPopular(); TabHistoryNew tabHistoryNew = new TabHistoryNew(); TabHistoryCategory tabHistoryCategory = new TabHistoryCategory(); TabHistoryFavorites tabHistoryFavorites = new TabHistoryFavorites(); switch (position) { case 0: return tabHistoryPopular; case 1: return tabHistoryNew; case 2: return tabHistoryCategory; case 3: return tabHistoryFavorites; } return null; } SlidingTabLayout (extends HorizontalScrollView)
setViewPager (from FragmentHistory)
public void setViewPager(ViewPager viewPager) { mTabStrip.removeAllViews(); mViewPager = viewPager; if (viewPager != null) { viewPager.setOnPageChangeListener(new InternalViewPagerListener()); populateTabStrip(); } } public void populateTabStrip ()
private void populateTabStrip() { final PagerAdapter adapter = mViewPager.getAdapter(); final OnClickListener tabClickListener = new TabClickListener(); for (int i = 0; i < adapter.getCount(); i++) { View tabView = null; TextView tabTitleView = null; if (mTabViewLayoutId != 0) { // If there is a custom tab view layout id set, try and inflate it tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false); tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); } if (tabView == null) { tabView = createDefaultTabView(getContext()); } if (tabTitleView == null && TextView.class.isInstance(tabView)) { tabTitleView = (TextView) tabView; } if (mDistributeEvenly) { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams(); lp.width = 0; lp.weight = 1; } tabTitleView.setText(adapter.getPageTitle(i)); tabView.setOnClickListener(tabClickListener); String desc = mContentDescriptions.get(i, null); if (desc != null) { tabView.setContentDescription(desc); } mTabStrip.addView(tabView); if (i == mViewPager.getCurrentItem()) { tabView.setSelected(true); } tabTitleView.setTextColor(getResources().getColorStateList(R.color.tab_selector)); tabTitleView.setTextSize(14); } }
getItem(...)you, regardless of position, create all fragments, is not necessary. - post_zeew