I have multiple fragment and all are show some news
Problem is that when I run my app all fragment load and get all fragment data from server but I want to get data when I move on that particular fragment so please help me
My Code is below
MainActivity.Java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setToolbar();
    initView();
}
private void initView() {
    TabLayout tabLayout=(TabLayout)findViewById(R.id.tablayout);
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    addTabs(tabLayout,viewPager);
    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
private void addTabs(TabLayout tabLayout, final ViewPager viewPager) {
    final PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), 5);
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.HeadLines));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.Sports));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.Health));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.India));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.World));
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    viewPager.setAdapter(pageAdapter);
    viewPager.setOffscreenPageLimit(5);
}
PageAdapter.java
public class PageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public PageAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
     return NewsFragment.newInstance(position,position+"");
}
@Override
public int getCount() {
    return mNumOfTabs;
}
NewFragment.java
public class NewsFragment extends Fragment {
private RecyclerView recyclerView;
public static NewsFragment newInstance(int index,String title) {
    NewsFragment fragment = new NewsFragment();
    Bundle args = new Bundle();
    args.putInt(NewsConstant.INDEX,index);
    args.putString(NewsConstant.TITLE,title);
    fragment.setArguments(args);
    return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_news_list, container, false);
    initView(view);
    getDataFromServer(); // Here i get data and display
    return view;
}
For Ex.
I use TabLayout, ViewPager in Activity to load Fragments
I have 3 TAB like Headline | Sports | Hollywood
I use same fragment for all TAB so when I click on Hollywood TAB then get data from server and display at that recyclerView
I faced same problem once Try using
private boolean isViewShown = false;
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser);      
if (getView() != null && isVisibleToUser) { 
     isViewShown = true; // fetchdata() contains logic to show data when page is selected mostly asynctask to fill the data 
     fetchData(); 
} else { 
     isViewShown = false; 
} }
Call your Api or what ever you want to see when you reached the fragment here inside
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With