首先你应该使用SharedPreferences来检查用户是否登录。
此外,您可以在片段中使用此代码来检查此片段是否可见。如果可见,您可以执行所需的任务,从共享首选项中获取布尔登录信息。
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");
}
}
这里看到我有一个片段,我在 onCreateView 方法中使用 viewPager
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;
并且在适配器中的 getitem 方法
@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;
}
在这种情况下,我只需要使用 performClick() 方法务实地调用 Button onClick 视图,它将自动替换我的片段。
更好的解决方案是更改 viewPager 的当前项目看看这个解决方案pager.setCurrentItem( num )
如果您想在 viewPager 的单个选项卡上显示不同的片段,请在片段适配器的 getItems() 方法中应用布尔条件。然后调用viewPager.setCurrentItem(int)函数。
确保您的 Fragment 适配器扩展 FragmentStatePagerAdapter 类