懒加载框架使用网上开源的:https://github.com/lianghanzhen/LazyViewPager
先看布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/base_title" /> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="100px" /> <com.wzb.bd2xl.widget.LazyViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>activity中的代码
public class XunLeiManager extends BaseActivity { @BindView(R.id.viewpager) LazyViewPager viewpager; @BindView(R.id.tabLayout) TabLayout tabLayout; PRivate List<String> titles; @Override public void initData() { } @Override public int getLayoutID() { return R.layout.activity_xunleimanager; } @Override public void initView() { tabLayout.setTabMode(TabLayout.MODE_FIXED); titles = Arrays.asList(getResources().getStringArray(R.array.xunlei_mamager)); PagerAdapter xunLeiManagerPagerAdapter = new XunleiFragmentAdapter(getSupportFragmentManager(), titles); viewpager.setAdapter(xunLeiManagerPagerAdapter); tabLayout.setupWithViewPager(viewpager); }} 此时滑动起来确实是懒加载.点击 正在加载 已完成 垃圾箱 确实都没重复加载 但是 重新运行程序起来, 此时先点击提交失败 发现日志 打印 把已完成 垃圾箱 功能模块中的onCreateView方法的日志打印出来了,我当前需要的是当点击对应的功能之后才执行onCreateView方法,应为我的数据初始化是放在onCreateView里面.而初始化数据可能会涉及到访问网络,当用户未点击该模块却去访问网络肯定不行.
那此时 查看tabLayout的点击事件:
public static class ViewPagerOnTabSelectedListener implements TabLayout.OnTabSelectedListener { private final ViewPager mViewPager; public ViewPagerOnTabSelectedListener(ViewPager viewPager) { mViewPager = viewPager; } @Override public void onTabSelected(TabLayout.Tab tab) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { // No-op } @Override public void onTabReselected(TabLayout.Tab tab) { // No-op } }mViewPager.setCurrentItem(tab.getPosition()); 在调用该方法的时候 假设 有 A,B,C,D四个Fragment 我初始化选中 A 然后设置currentItem为D的时候 也会对BC进行onCreateView进行调用.
猜测是在平滑过渡效果的时候快速的显示了 BC两个页面.. 解决办法 直接重写:setOnTabSelectedListener方法得到觉得 只是在从A点到D的时候就底部绿色条是一闪到D的底部 而不是滑动了
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewpager.setCurrentItem(tab.getPosition(),false); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } });新闻热点
疑难解答