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); } } 
  • one
    Add code in which fragments are manipulated. - post_zeew
  • @post_zeew seems to have a popularFragment created again and again, how can I remove them? - Ilya Zaharov
  • At a minimum, the fact that in getItem(...) you, regardless of position, create all fragments, is not necessary. - post_zeew
  • @post_zeew Thanks for the advice, but the problem is different. - Ilya Zaharov

0