I have a ViewPager in it that holds fragments. In the fragment there is a RecyclerView, which has an event for moving to a new fragment. Everything passes correctly, but when you press back, the fragment becomes empty, and draws the data only after scrolling.

holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { FragmentTransaction fragmentTransaction; Fragment_texnika_adapter fragment_texnika_adapter = new Fragment_texnika_adapter(); fragmentTransaction = activity.getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.content_main, fragment_texnika_adapter); fragmentTransaction.addToBackStack(null); Bundle bundle = new Bundle(); bundle.putParcelable("statictika", model.getTexnika_sobr()); fragment_texnika_adapter.setArguments(bundle); fragmentTransaction.commit(); mListener.onContentItemClicked(model); 

ViewPager itself

 public class SectionsPagerAdapter extends FragmentStatePagerAdapter { private Map<Integer, String> mFragmentTags; private FragmentManager mFragmentManager; FragmentActivity fragmentActivity; private static int NUM_ITEMS = 4; public int getItemPosition(Object object) { return POSITION_NONE; } public SectionsPagerAdapter(FragmentManager fragmentManager, FragmentActivity fragmentActivity) { super(fragmentManager); mFragmentManager = fragmentManager; mFragmentTags = new HashMap<Integer, String>(); this.fragmentActivity = fragmentActivity; } // Returns total number of pages @Override public int getCount() { return NUM_ITEMS; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "Сводка"; case 1: return "Награды"; case 2: return "Статистика"; case 3: return "Техника"; } return null; } @Override public Fragment getItem(int position) { switch (position) { case 0: return Fragment_cvodka.newInstance(); case 1: return Fragment_dostizenie.newInstance(); // return Fragment_cvodka.newInstance(); case 2: return Fragment_statistika.newInstance(); case 3: return Fragment_texnika.newInstance(); default: return null; } } @Override public Object instantiateItem(ViewGroup container, int position) { Object object = super.instantiateItem(container, position); if (object instanceof Fragment) { Fragment fragment = (Fragment) object; String tag = fragment.getTag(); mFragmentTags.put(position, tag); } return object; } public Fragment getFragment(int position) { Fragment fragment = null; String tag = mFragmentTags.get(position); if (tag != null) { fragment = mFragmentManager.findFragmentByTag(tag); } return fragment; } 

}

    1 answer 1

    ViewPager does not redraw elements (does not re-show, so to speak), because it does not know that we use fragments. From the solutions:

    • Create a separate list of fragments in the methods of destruction / creation of activi / something, where the view pager is forced to redraw
    • Forced to destroy the ViewPager (I did sliderView = null ), and when restoring activation / what else to re- ViewPager