【发布时间】:2016-05-16 11:57:29
【问题描述】:
当我启动应用程序时,Tab Home 启动,但 Cung Hoàng Đạo 也启动。当我选择选项卡 Cung Hoàng Đạo 时,Tab 12 Con Giap 和 Tử Vi 启动。
我希望它们仅在它们被选中时启动。 对不起我的语法。 谢谢大家。
这是我的代码:
public class ViewPageContainerFragment extends BaseFragment {
private ViewPager viewPager;
private TabLayout tabLayout;
private final String TAG = getClass().getSimpleName();
private ViewPagerAdapter adapter;
private boolean[] isTabsSelected = new boolean[5];
private OnTabChangeListener mOnTabChangeListener;
private int countSelectedTab = 1;
@Override
public void init() {
tabLayout = (TabLayout)getView().findViewById(R.id.tab_layout);
viewPager = (ViewPager) getView().findViewById(R.id.view_pager);
adapter = new ViewPagerAdapter(getFragmentManager());
}
@Override
public void setEvent() {
setupViewPager(viewPager);
isTabsSelected[0] = true;
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected: "+position);
if (position != 0) {
if (!isTabsSelected[position]
&& adapter.getItem(position).getChildFragmentManager().getBackStackEntryCount() == 1
&& getCurrentFragment(position) instanceof OnTabChangeListener) {
mOnTabChangeListener = (OnTabChangeListener) getCurrentFragment(position);
mOnTabChangeListener.onTabSelected();
}
} else if (adapter.getItem(0).getChildFragmentManager().getBackStackEntryCount() == 1) {
Log.d(TAG, "position = 0");
}
if (!isTabsSelected[position]) {
isTabsSelected[position] = true;
countSelectedTab++;
viewPager.setOffscreenPageLimit(countSelectedTab);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void setValue() {
}
@Override
public int getLayoutId() {
return R.layout.fragment_viewpage;
}
private void setupViewPager(ViewPager viewPager) {
adapter.addFrag(new HomeContainerFragment(), "Home");
adapter.addFrag(new CungHoangDaoContainerFragment(), "Cung Hoàng Đạo");
adapter.addFrag(new ConGiapContainerFragment(), "12 Con Giáp");
adapter.addFrag(new TuViContainerFragment(), "Tử Vi");
viewPager.setAdapter(adapter);
}
public Fragment getCurrentFragment(int position) {
FragmentManager fm = getChildFragmentManager();
return fm.findFragmentById(R.id.container_framelayout);
}
public interface OnTabChangeListener {
void onTabSelected();
}
}
【问题讨论】:
-
将您的代码发布到您调用这些标签片段的位置
-
我在帖子上有更新代码,太感谢了!
-
setOffscreenPageLimit()won't work to meet only start when is slected ,pageLimit表示应保留到任一侧的页数视图层次结构中的当前页面处于空闲状态,即FragmentA+B+C,如果设置limit==1,那么Fragment B 将在第一次启动时加载A。这应该是答案Viewpager Lazy load data