懶加載框架使用網上開源的: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) { } });新聞熱點
疑難解答