I have 3 tabs in a viewpager and in all the 3 fragments i am calling the server using retrofit but when i launch the activity first 2 fragments are called and from both network is being called and when i go to position next tab nothing is displayed and position becomes 2.
The issue is when I come to the activity view pager is initialized and the pager adapter return two fragments which are at position 0 and 1 and inflate both so network is called from both of then but when I move tab to next position becomes 2...it should be 1.
Adapter Class:
public class PagerAdapter extends FragmentStatePagerAdapter {
private int mNumTabs;
public PagerAdapter(FragmentManager fm, int numTabs) {
super(fm);
this.mNumTabs= numTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
Fragment1 tab0 = new Fragment1();
return tab0;
case 1:
Fragment2 tab1 = new Fragment2();
return tab1;
case 2:
Fragment3 tab2 = new Fragment3();
return tab2;
default:
return null;
}
}
@Override
public int getCount() {
return mNumTabs;
}
}
Activity Class :
public class UserProfileScreen extends AppCompatActivity {
private ViewPager viewPager;
private TabLayout tabLayout;
private Context context;
private PagerAdapter PagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile_screen);
context = this;
initViews();
tabLayout.addTab(tabLayout.newTab().setText("About"));
tabLayout.addTab(tabLayout.newTab().setText("Session"));
tabLayout.addTab(tabLayout.newTab().setText("Subjects"));
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(profilePagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Unselected",Toast.LENGTH_LONG).show();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Reselected",Toast.LENGTH_LONG).show();
}
});
}
private void initViews(){
myToolbar = (Toolbar) findViewById(R.id.toolbar);
tabLayout = (TabLayout) findViewById(R.id.profile_tab_layout);
setSupportActionBar(myToolbar);
viewPager = (ViewPager) findViewById(R.id.profile_viewPager);
}
}
Fragment1 :
public class Fragment1 extends Fragment {
private RecyclerView sessions_recycler_view;
private SessionsAdapter sessionsAdapter;
private SessionProfileFragmentPresenter presenter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sessionsAdapter = new SessionsAdapter(getContext(),this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile,container,false);
sessions_recycler_view = (RecyclerView) view.findViewById(R.id.sessions_list);
sessions_recycler_view.setAdapter(sessionsAdapter);
//Server Call to get List<HashMap<String,Object>> data
setDataToAdapter(data);
return view;
}
private void setDataToAdapter(List<HashMap<String, Object>> sessions) {
sessionsAdapter.setData(sessions);
}
}
Fragment2 is also same as Fragment1.
I support Pramod Garg answer
Default OffscreenPageLimit of viewPager is 1 so the below code may useful for you. I just added the line viewpager.setOffscreenPageLimit(2).
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile_screen);
context = this;
initViews();
tabLayout.addTab(tabLayout.newTab().setText("About"));
tabLayout.addTab(tabLayout.newTab().setText("Session"));
tabLayout.addTab(tabLayout.newTab().setText("Subjects"));
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(profilePagerAdapter);
viewpager.setOffscreenPageLimit(2)
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Unselected",Toast.LENGTH_LONG).show();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Reselected",Toast.LENGTH_LONG).show();
}
});
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.