1

In my application I have used tab-layout with viewpager, initially all the tabs are working fine but when the data is updated from the server it is not updating in the tabs. It is showing the old values only. If I kill the app and open again the new values will be reflected. How can I updated the data immediately.

Thanks in advance

Android_Developer
  • 103
  • 1
  • 2
  • 11

1 Answers1

0

for any body has the same case, you can implement Viewpager2 from here then add adapter.notifyItemChanged(position); as below:

viewPager = (ViewPager2) android.findViewById(R.id.view_pager);
    tabLayout = (TabLayout) android.findViewById(R.id.tab_layout);


    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager(),getLifecycle());
    viewPager.setAdapter(adapter);

    viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels);
        }

        @Override
        public void onPageSelected(int position){
            super.onPageSelected(position);
            adapter.notifyItemChanged(position);
        }
    });
        new TabLayoutMediator(tabLayout, viewPager, true,
            (tab, position) -> {



                switch (position) {
                    case 0:
                        tab.setText(getString(R.string.tab1));
                        break;
                    case 1:
                        tab.setText(getString(R.string.tab2));
                        break;
                    case 2:
                        tab.setText(getString(R.string.tab3));
                        break;
                    case 3:
                        tab.setText(getString(R.string.tab4));
                        break;
                    default:
                        tab.setText(getString(R.string.tab1));
                        break;
                }

            }).attach();

The above code will refresh the code each time you click the tab. but not when sliding the viewpager.

the code for adapter is:

public class ViewPagerAdapter extends FragmentStateAdapter {

    private static final int CARD_ITEM_SIZE = 4;

    public ViewPagerAdapter(@NonNull FragmentManager fragmentActivity, @NonNull Lifecycle life) {
        super(fragmentActivity,life);
    }


    @NonNull
    @Override
    public Fragment createFragment(int position) {
        //return CardFragment.newInstance(position);
        switch (position) {
            case 0:
                return FragmentTab1.newInstance();
            case 1:
                return FragmentTab2.newInstance();
            case 2:
                return FragmentTab3.newInstance();
            case 3:
                return FragmentTab4.newInstance();
            default:
                return FragmentTab1.newInstance();
        }

    }

    @Override
    public int getItemCount() {
        return CARD_ITEM_SIZE;
    }


}