First you should use SharedPreferences to check user is logged in or not.
Moreover you can use this code in your fragments to check if this fragment is visible or not. and if visible you can do your required task getting boolean logged in information from shared preferences.
private static boolean m_iAmVisible;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
m_iAmVisible = isVisibleToUser;
if (m_iAmVisible) {
Log.d(localTAG, "this fragment is now visible");
} else {
Log.d(localTAG, "this fragment is now invisible");
}
}
Here see i have a fragment in which i am using viewPager, in onCreateView Method
final View x = inflater.inflate(R.layout.consumer_tab_layout, null);
tabLayout = (TabLayout) x.findViewById(R.id.tabs);
viewpager_for_tabs = (ViewPager) x.findViewById(R.id.viewpager_for_tabs);
bottom_tv1 = (TextView) x.findViewById(R.id.bottom_tv1);
bottom_tv2 = (TextView) x.findViewById(R.id.bottom_tv2);
bottom_tv3 = (TextView) x.findViewById(R.id.bottom_tv3);
bottom_tv4 = (TextView) x.findViewById(R.id.bottom_tv4);
bottom_tv5 = (TextView) x.findViewById(R.id.bottom_tv5);
/**
*Set an Apater for the View Pager
*/
viewpager_for_tabs.setAdapter(new MyAdapter(getChildFragmentManager()));
viewpager_for_tabs.setOffscreenPageLimit(5);
/**
* Now , this is a workaround ,
* The setupWithViewPager dose't works without the runnable .
* Maybe a Support Library Bug .
*/
viewpager_for_tabs.setOnPageChangeListener(myOnPageChangeListener);
bottom_tv1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateBottomTabTextViews(bottom_tv1, R.drawable.d1);
viewpager_for_tabs.setCurrentItem(0, false);
}
});
bottom_tv2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateBottomTabTextViews(bottom_tv2, R.drawable.d2);
viewpager_for_tabs.setCurrentItem(1, false);
}
});
bottom_tv3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateBottomTabTextViews(bottom_tv3, R.drawable.d3);
viewpager_for_tabs.setCurrentItem(2, false);
}
});
bottom_tv4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateBottomTabTextViews(bottom_tv4, R.drawable.d4);
viewpager_for_tabs.setCurrentItem(3, false);
}
});
bottom_tv5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateBottomTabTextViews(bottom_tv5, R.drawable.d5);
viewpager_for_tabs.setCurrentItem(4, false);
}
});
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewpager_for_tabs);
}
});
return x;
And in adapter getitem Methods
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new fragment();
case 1:
return frag2.getInstance();
case 2:
return frag3.getInstance();
case 3:
return frag4.getInstance();
case 4:
return frag5.getInstance();
}
return null;
}
In this was i just have to pragmatically call Button onClick using performClick() method for views and it will automatically replace my fragment.
Better solution would be to change current item of viewPager Have a look at this solution pager.setCurrentItem( num )
If you want to show different fragments on a single tab of viewPager then apply Boolean condition in getItems() method of your fragment adapter. then call viewPager.setCurrentItem(int)
function.
Make sure your Fragment adapter extends FragmentStatePagerAdapter
class