TabLayout+ViewPager 懶載入
懶載入框架使用網上開源的: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) {
}
});
相關文章
- Tablayout+ViewPager動態新增fragment懶載入TabLayoutViewpagerFragment
- 懶載入
- 懶載入和預載入
- iOS: 懶載入iOS
- 【譯】懶載入元件元件
- 圖片懶載入
- Vue元件懶載入Vue元件
- Ribbon - 懶載入
- vue路由懶載入Vue路由
- Vue 的懶載入Vue
- Swift中懶載入Swift
- hibernate懶載入
- spring 懶載入Spring
- 什麼是hibernate懶載入?什麼時候用懶載入?為什麼要用懶載入?(轉)
- Vue 路由按需載入(路由懶載入)Vue路由
- 圖片預載入和懶載入
- 前端效能優化 --- 懶載入&預載入前端優化
- 單張圖片懶載入
- 圖片懶載入(IntersectionObserver)Server
- vue(18)路由懶載入Vue路由
- 關於懶載入原理
- 懶載入之intersection observerServer
- 圖片懶載入原理
- Fragment 懶載入實踐Fragment
- 談談IntersectionObserver懶載入Server
- Hibernate 之 懶載入
- 不要濫用懶載入
- 手把手實現圖片懶載入+封裝vue懶載入元件封裝Vue元件
- 1道面試題---懶載入和預載入面試題
- 圖片懶載入踩坑
- 圖片懶載入大白話
- 圖片懶載入實現
- dva中元件的懶載入元件
- DCL懶載入單例模式單例模式
- tablayout+viewpager+fragment懶載入TabLayoutViewpagerFragment
- 懶載入簡單的方法
- Vue程式碼分割懶載入Vue
- 懶載入例項--hibernate