TabLayout+ViewPager+Fragment懶載入實現
tablayout的使用
- TabLayout是在design下的包中,一般跟viewpager,fragment結合使用;
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.geek.viewpagerfragmentdemo.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tabLayout"
/>
<android.support.design.widget.TabLayout
android:background="@drawable/tablayout_bg"
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
app:tabIndicatorHeight="0dp"
/>
</RelativeLayout>
這裡預設設定indicator的高度為0來不顯示
- 但是在viewpager中用fragment存在著預載入機制,這個在一定的程度上很是麻煩,所以就使用懶載入機制來控制預載入模式,這裡重寫一個父類的BaseFragment來控制:
/**
* fragment 基類
*/
public abstract class BaseFragment extends Fragment{
protected boolean isInit = false;//檢視是否已經初初始化
protected boolean isLoad = false;//是否載入
protected final String TAG = "BaseFragment";
private View view;//檢視
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(setContentView(), container, false);
isInit = true;
initData();
/**初始化的時候去載入資料**/
isCanLoadData();
return view;
}
/**
* 檢視是否可見
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
isCanLoadData();
}
/**
* 是否可以載入資料
*/
private void isCanLoadData() {
if (!isInit) {
return;
}
if (getUserVisibleHint()) {
startLoad();
isLoad = true;
} else {
if (isLoad) {
stopLoad();
}
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
isInit = false;
isLoad = false;
}
protected View getContentView() {
return view;
}
/**
* findViewById
*/
protected <T extends View> T findViewById(int id) {
return (T) getContentView().findViewById(id);
}
protected abstract int setContentView();//顯示的佈局
protected abstract void startLoad();//載入資料
protected abstract void initData();//初始化資料
/**
* 當檢視不可見並且載入過資料,呼叫此方法
*/
protected void stopLoad() {}
}
繼承這個父類,在startLoad方法中載入相對應的方法。
- 在activity中來呼叫,具體如下:
private void initTabLayout(){
mFragment.clear();
mTabLayout.removeAllTabs();
mTabLayout.setTabMode(TabLayout.MODE_FIXED);//設定tab模式,當前為系統預設模式
mFragment.add(new Fragment1());
mFragment.add(new Fragment2());
mFragment.add(new Fragment3());
mAdapter = new MyFragmentAdapter(getSupportFragmentManager(),mFragment,mContext);
mVp.setAdapter(mAdapter);
mVp.setOffscreenPageLimit(2);
//繫結ViewPager
mTabLayout.setupWithViewPager(mVp);
mVp.setCurrentItem(0);
for (int i=0;i<mTabLayout.getTabCount();i++){
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab!=null){
View v = mAdapter.getView(i);
if (i==0){//預設第一個選中
v.setSelected(true);
}
tab.setCustomView(v);
}
}
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
mVp.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
重寫一個介面卡。來載入資料;
總的來說是可以解決預載入機制問題,
效果圖如下:
相關文章
- TabLayout+ViewPager+Fragment實現懶載入完全解決方案TabLayoutViewpagerFragment
- Android tabLayout+viewPager+fragment處理懶載入AndroidTabLayoutViewpagerFragment
- Tablayout+Viewpager+Fragment組合使用以及懶載入機制TabLayoutViewpagerFragment
- 圖片懶載入實現
- 圖片懶載入js實現JS
- 滾動載入圖片(懶載入)實現原理
- 手把手實現圖片懶載入+封裝vue懶載入元件封裝Vue元件
- [譯] 原生實現圖片懶載入
- React如何實現圖片懶載入React
- 實現圖片懶載入(throttle, debounce)
- Fragment 懶載入實踐Fragment
- 深入理解React:懶載入(lazy)實現原理React
- 實現圖片懶載入的三種方式
- 懶載入
- 30行Javascript程式碼實現圖片懶載入JavaScript
- vue12-ElementUI tree元件懶載入的實現VueUI元件
- 多層巢狀後的 Fragment 懶載入實現巢狀Fragment
- 基於react的lazy-load懶載入實現React
- Vue實現一個圖片懶載入外掛Vue
- 微信小程式--實現圖片懶載入(lazyload)微信小程式
- 小說APP原始碼的圖片載入方式,懶載入和預載入的實現APP原始碼
- 懶載入和預載入
- python 實現類屬性的懶載入裝飾器Python
- 一起來實現圖片滾動懶載入
- Ribbon - 懶載入
- vue3 + vite實現非同步元件和路由懶載入VueVite非同步元件路由
- Vue元件懶載入Vue元件
- 【譯】懶載入元件元件
- 圖片懶載入
- vue路由懶載入Vue路由
- Vue 的懶載入Vue
- Hibernate 之 懶載入
- 如何實現 SAP UI5 的 Lazy Loading(延遲載入,懶載入)試讀版UI
- 圖片預載入和懶載入
- Vue 路由按需載入(路由懶載入)Vue路由
- TabLayout+ViewPager+Fragment實現切頁展示TabLayoutViewpagerFragment
- 前端效能優化 --- 懶載入&預載入前端優化
- 懶載入之intersection observerServer
- 圖片懶載入原理