我有一个包含三个片段的TabLayout,在第一个选项卡上,我想根据条件在两个片段之间切换,我使用了if语句,但是片段仍然没有切换,它只保留了最初的片段。下面是案例场景和正在执行的代码片段。
我的应用程序允许用户决定是否在第一次使用时登录,我的主要活动是启动程序,主活动的适配器(包含TabLayout和三个Fragment)检查用户是否登录。C.=
if (user != login) {
load fragment A
}else{
load fragment B
}我有一个选项,用户在使用应用程序时可以登录,如果用户单击登录按钮,它会加载一个片段供用户登录,一旦用户登录,该片段仍然保留用户未登录的状态,即它仍在加载片段A,但随后我可以在应用程序中看到所有用户登录详细信息。商业、商业、金融、金融等领域的商品、金融等领域的商品、商品、商业、金融等领域的商业、商业、金融、金融等领域。
这一点仍然是积极的
if (user != login) {
load fragment A
} 代码片段
@Override
public Fragment getItem(int position) {
Fragment f;
switch (position) {
case NEWS_POST:
if(fbid != null){
f = new NewsFragment();
}else{
f = new NewsAllFragment();
}发布于 2016-08-15 12:12:46
首先,您应该使用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方法中,我在其中使用了onCreateView
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 performClick,它将自动替换我的片段。
更好的解决方案是更改viewPager的当前项--看看这个解决方案pager.setCurrentItem( num )
如果希望在viewPager的单个选项卡上显示不同的片段,那么在片段适配器的getItems()方法中应用布尔条件。然后调用viewPager.setCurrentItem(int)函数。
确保您的片段适配器扩展了FragmentStatePagerAdapter 类
https://stackoverflow.com/questions/38954511
复制相似问题