在第一层导航栏内套第二层发现一个问题:默认进入最外层导航栏的第一页,点击最外层导航栏的第三页,再点回最外层的导航栏的第一页,第二层的view内容就没了,要疯狂切换第二层其它页面才会再刷出来切换最外层导航栏前所在的页面
最外层导航栏的第一页

最外层导航栏的第三页

再点回最外层的导航栏的第一页

页面就获取不了了
第一层导航栏代码除了导航栏用的不一样其它完全跟视频里的一样
public class FragmentCreator {
public final static int INDEX_FIRST = 0;
public final static int INDEX_SECOND = 1;
public final static int INDEX_THIRD = 2;
public final static int PAGE_COUNT = 3;
private static Map<Integer, BaseFragment> sCache = new HashMap<>();
public static BaseFragment getFragment(int index){
BaseFragment baseFragment = sCache.get(index);
if (baseFragment!=null){
return baseFragment;
}
switch (index){
case INDEX_FIRST:
baseFragment = new FirstFragment();
break;
case INDEX_SECOND:
baseFragment = new SecondFragment();
break;
case INDEX_THIRD:
baseFragment = new ThirdFragment();
break;
}
sCache.put(index,baseFragment);
return baseFragment;
}
}
public abstract class BaseFragment extends Fragment {
private View Rootview;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Rootview = onSubViewLoaded(inflater,container);
return Rootview;
}
protected abstract View onSubViewLoaded(LayoutInflater inflater, ViewGroup container);
}
public class IndicatorAdapter extends CommonNavigatorAdapter {
private final String[] titles;
private OnIndicatorTabClickListener onIndicatorTabClickListener;
public IndicatorAdapter(Context context) {
titles = context.getResources().getStringArray(R.array.indicator_title);
}
@Override
public int getCount() {
if (titles!=null){
return titles.length;
}
return 0;
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
CommonPagerTitleView commonPagerTitleView = new CommonPagerTitleView(context);
// load custom layout
View customLayout = LayoutInflater.from(context).inflate(R.layout.main_pager_title_layout, null);
final ImageView titleImg = (ImageView) customLayout.findViewById(R.id.title_img);
final TextView titleText = (TextView) customLayout.findViewById(R.id.title_text);
titleImg.setImageResource(R.mipmap.ic_launcher);
titleText.setText(titles[index]);
commonPagerTitleView.setContentView(customLayout);
commonPagerTitleView.setOnPagerTitleChangeListener(new CommonPagerTitleView.OnPagerTitleChangeListener() {
@Override
public void onSelected(int index, int totalCount) {
titleText.setTextColor(Color.WHITE);
}
@Override
public void onDeselected(int index, int totalCount) {
titleText.setTextColor(Color.LTGRAY);
}
@Override
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
titleImg.setScaleX(1.3f + (0.8f - 1.3f) * leavePercent);
titleImg.setScaleY(1.3f + (0.8f - 1.3f) * leavePercent);
}
@Override
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
titleImg.setScaleX(0.8f + (1.3f - 0.8f) * enterPercent);
titleImg.setScaleY(0.8f + (1.3f - 0.8f) * enterPercent);
}
});
commonPagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onIndicatorTabClickListener!=null){
onIndicatorTabClickListener.onTabClick(index);
}
}
});
return commonPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
return null;
}
//暴露一个方法去调用点击事件
public void setOnIndicatorTabClickListener(OnIndicatorTabClickListener listener){
this.onIndicatorTabClickListener=listener;
}
public interface OnIndicatorTabClickListener{
void onTabClick(int index);
}
}
public class MainContentAdapter extends FragmentPagerAdapter {
public MainContentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return FragmentCreator.getFragment(position);
}
@Override
public int getCount() {
return FragmentCreator.PAGE_COUNT;
}
}
public class MainActivity extends FragmentActivity {
private static final String TAG = MainActivity.class.getName();
private MagicIndicator magicIndicator;
private ViewPager viewPager;
private IndicatorAdapter indicatorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initEvent();
}
private void initEvent() {
indicatorAdapter.setOnIndicatorTabClickListener(new IndicatorAdapter.OnIndicatorTabClickListener() {
@Override
public void onTabClick(int index) {
LogUtil.d(TAG, "Click::" + index);
if (viewPager != null) {
viewPager.setCurrentItem(index);
}
}
});
}
private void initView() {
magicIndicator = (MagicIndicator) this.findViewById(R.id.main_indicator);
magicIndicator.setBackgroundColor(Color.parseColor("#33B5E5"));
//创建适配器
indicatorAdapter = new IndicatorAdapter(this);
CommonNavigator commonNavigator = new CommonNavigator(this);
commonNavigator.setAdjustMode(true);
commonNavigator.setAdapter(indicatorAdapter);
magicIndicator.setNavigator(commonNavigator);
//ViewPager
viewPager = (ViewPager) this.findViewById(R.id.view_pager);
//内容适配器
FragmentManager supportFragmentManager = getSupportFragmentManager();
MainContentAdapter mainContentAdapter = new MainContentAdapter(supportFragmentManager);
viewPager.setAdapter(mainContentAdapter);
magicIndicator.setNavigator(commonNavigator);
//把ViewPager和Indicator绑定一起
ViewPagerHelper.bind(magicIndicator, viewPager);
}
}
第二层导航栏跟第一层大多类似
public class TopFragmentCreator {
public final static int INDEX_TOP_FIRST = 0;
public final static int INDEX_TOP_SECOND = 1;
public final static int INDEX_TOP_THIRD = 2;
public final static int INDEX_TOP_FOURTH = 3;
public final static int PAGE_TOP_COUNT = 4;
private static Map<Integer, BaseFragment> sCache = new HashMap<>();
public static BaseFragment getFragment(int index) {
BaseFragment baseFragment = sCache.get(index);
if (baseFragment != null) {
return baseFragment;
}
switch (index) {
case INDEX_TOP_FIRST:
baseFragment = new TopFirstFragment();
break;
case INDEX_TOP_SECOND:
baseFragment = new TopSecondFragment();
break;
case INDEX_TOP_THIRD:
baseFragment = new TopThirdFragment();
break;
case INDEX_TOP_FOURTH:
baseFragment = new TopFourthFragment();
break;
}
sCache.put(index, baseFragment);
return baseFragment;
}
}
public class TopIndicatorAdapter extends CommonNavigatorAdapter {
private final String[] titles;
private OnIndicatorTabClickListener onIndicatorTabClickListener;
public TopIndicatorAdapter(Context context) {
titles = context.getResources().getStringArray(R.array.topIndicator_title);
}
@Override
public int getCount() {
if (titles!=null){
return titles.length;
}
return 0;
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
SimplePagerTitleView simplePagerTitleView = new ColorTransitionPagerTitleView(context);
simplePagerTitleView.setNormalColor(Color.GRAY);
simplePagerTitleView.setSelectedColor(Color.WHITE);
simplePagerTitleView.setText(titles[index]);
simplePagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onIndicatorTabClickListener!=null){
onIndicatorTabClickListener.onTabClick(index);
}
}
});
return simplePagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
LinePagerIndicator linePagerIndicator = new LinePagerIndicator(context);
linePagerIndicator.setMode(LinePagerIndicator.MODE_EXACTLY);
linePagerIndicator.setLineWidth(UIUtil.dip2px(context, 10));
linePagerIndicator.setColors(Color.WHITE);
return linePagerIndicator;
}
//暴露一个方法去调用点击事件
public void setOnIndicatorTabClickListener(OnIndicatorTabClickListener listener){
this.onIndicatorTabClickListener=listener;
}
public interface OnIndicatorTabClickListener{
void onTabClick(int index);
}
}
public class TopMainContentAdapter extends FragmentPagerAdapter {
public TopMainContentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return TopFragmentCreator.getFragment(position);
}
@Override
public int getCount() {
return TopFragmentCreator.PAGE_TOP_COUNT;
}
}
public class FirstFragment extends BaseFragment {
private static final String TAG = FirstFragment.class.getName();
private ViewPager topViewPager;
private TopIndicatorAdapter topIndicatorAdapter;
private MagicIndicator topMagicIndicator;
@Override
protected View onSubViewLoaded(LayoutInflater inflater, ViewGroup container) {
View rootView = inflater.inflate(R.layout.fragment_first, container, false);
initView(rootView);
initEvent();
return rootView;
}
private void initView(View rootView) {
topMagicIndicator = (MagicIndicator) rootView.findViewById(R.id.topMagic_indicator);
topViewPager = (ViewPager) rootView.findViewById(R.id.topView_pager);
FragmentManager supportFragmentManager = getActivity().getSupportFragmentManager();
TopMainContentAdapter topMainContentAdapter = new TopMainContentAdapter(supportFragmentManager);
topViewPager.setAdapter(topMainContentAdapter);
//创建适配器
topIndicatorAdapter = new TopIndicatorAdapter(getActivity());
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdapter(topIndicatorAdapter);
topMagicIndicator.setNavigator(commonNavigator);
LinearLayout titleContainer = commonNavigator.getTitleContainer();
titleContainer.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
titleContainer.setDividerDrawable(new ColorDrawable() {
@Override
public int getIntrinsicWidth() {
return UIUtil.dip2px(getActivity(), 15);
}
});
final FragmentContainerHelper fragmentContainerHelper = new FragmentContainerHelper(topMagicIndicator);
fragmentContainerHelper.setInterpolator(new OvershootInterpolator(2.0f));
fragmentContainerHelper.setDuration(300);
topViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
fragmentContainerHelper.handlePageSelected(position);
}
});
}
private void initEvent() {
topIndicatorAdapter.setOnIndicatorTabClickListener(new TopIndicatorAdapter.OnIndicatorTabClickListener() {
@Override
public void onTabClick(int index) {
if (topViewPager != null) {
topViewPager.setCurrentItem(index);
LogUtil.d(TAG, "Click::" + index);
}
}
});
}
}
public class TopThirdFragment extends BaseFragment {
@Override
protected View onSubViewLoaded(LayoutInflater inflater, ViewGroup container) {
View rootView = inflater.inflate(R.layout.fragment_top_third,container,false);
return rootView;
}
}
安卓小白,求大佬们指点指点
生命周期的原因,你去看看领券联盟的课程就知道了。
解决方法
你的viewPager设置这个方法setOffscreenPageLimit,参数是你此viewPager要显示的fragment个数。
至于为什么你不知道呀,你学完领券联盟就知道咯。
还发现切换回来之后第二层第四个页面也没有了,然后点击第二层第二页再切回第四页页面就又有了,点击第二层第一再切回第三页页面也有了,怎么回事呢大佬们???