0

I'm using FragmentStatePagerAdapter for TabLayout with a ViewPager going to show a RecyclerView and when I click on a item of my list and i click back to go to previous page It's showing me a blank page with TabLayout and no RecyclerView. Here is my Adapter code:

public class MyViewPagerAdapter extends FragmentStatePagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public MyViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

And here is my fragment handling ViewPager and TabLayout:

public class InternetFragment extends Fragment {

    private View rootView;
    private TabLayout tabLayout;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_internet_package, container, false);

        initUI();

        return rootView;
    }

    private void initUI() {
        ViewPager viewPager = rootView.findViewById(R.id.viewpager);
        tabLayout = rootView.findViewById(R.id.tabs);

        setupViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);

        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            TextView txtTabTitle = (TextView) LayoutInflater.from(GC.getInstance().getAppContext()).inflate(R.layout.custom_tablayout_cell, null);
            tabLayout.getTabAt(i).setCustomView(txtTabTitle);
            txtTabTitle.setTypeface(GC.font);
        }
    }

    private void setupViewPager(ViewPager viewPager) {
        String IMSI = GC.getInstance().getSimNumber();
        MyViewPagerAdapter pageAdapter = new MyViewPagerAdapter(getActivity().getSupportFragmentManager());

        if (IMSI.startsWith(ClientConstant.IMSI_RIGHTEL) || IMSI.startsWith(ClientConstant.IMSI_TALIA)) {
            tabLayout.setVisibility(View.GONE);
            pageAdapter.addFragment(new InternetOnlinePackageFragment(), "");
        } else {
            pageAdapter.addFragment(new InternetUSSDPackageFragment(), getString(R.string.package_ussd));
            pageAdapter.addFragment(new InternetOnlinePackageFragment(), getString(R.string.package_online));
        }
        viewPager.setAdapter(pageAdapter);

        if (!IMSI.startsWith(ClientConstant.IMSI_RIGHTEL) || !IMSI.startsWith(ClientConstant.IMSI_TALIA))
            viewPager.setCurrentItem(1);
    }
}
Mohsen Morshedi
  • 183
  • 1
  • 1
  • 15
  • post your activity code which is handling tablayout and viewpager. – Mohammed Farhan Jul 28 '18 at 07:20
  • Check if your recyclerview has any item. It is probable when you set items in `onCreate` method. You may use `onSaveInstanceState` to keep list items. – momvart Jul 28 '18 at 07:24
  • Try to set the off screen page limit, it will not recreate your fragment and data will not get reset. viewPager.setOffscreenPageLimit(myViewPagerAdapter .getCount()); – Krishna Sharma Jul 28 '18 at 07:33
  • @MohammedFarhan I've edited my question with what you needed – Mohsen Morshedi Jul 28 '18 at 07:47
  • @KrishnaSharma It didn't work for me – Mohsen Morshedi Jul 28 '18 at 07:48
  • @MohammadOmidvar I don't have any onCreate method – Mohsen Morshedi Jul 28 '18 at 07:49
  • `viewPager.setOffscreenPageLimit(myViewPagerAdapter.getCount())` where you have added ? did you also check what count it returns ?. Share the click handler code where the issue come – Krishna Sharma Jul 28 '18 at 07:57
  • @KrishnaSharma It returns 2 the count of my tabs. I've added it after setAdapter. Here is my onClick RecyclerView: – Mohsen Morshedi Jul 28 '18 at 08:05
  • FragmentManager manager = ((AppCompatActivity) activity).getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.replace(R.id.fragment_frame, fragment, context.getString(R.string.Package_Details)); ft.addToBackStack(context.getString(R.string.Package_Details)); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit(); – Mohsen Morshedi Jul 28 '18 at 08:06
  • More interested to know the code where you have mentioned **when I click on a item of my list and i click back to go to previous page It's showing me a blank page** edit your question with the code where the issue is. – Krishna Sharma Jul 28 '18 at 08:09
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/176927/discussion-between-mohsen-morshedi-and-krishna-sharma). – Mohsen Morshedi Jul 28 '18 at 08:16
  • add code for activity and recyclerview – prashant17 Jul 28 '18 at 08:43

0 Answers0