Commit 69f3ec50 by 罗翻

fragment增加懒加载

parent 83a71781
...@@ -21,11 +21,9 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel> ...@@ -21,11 +21,9 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
public T mPresenter; public T mPresenter;
public E mModel; public E mModel;
private Unbinder mKnife; private Unbinder mKnife;
/** private boolean isVisible; //是否可见状态
* 视图是否已经初初始化 private boolean isPrepared; //标志位,View已经初始化完成。
*/ private boolean isFirstLoad = true;
protected boolean isInit = false;
protected boolean isLoad = false;
@Override @Override
...@@ -39,6 +37,8 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel> ...@@ -39,6 +37,8 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mPresenter = TUtil.getT(this, 0); mPresenter = TUtil.getT(this, 0);
mModel = TUtil.getT(this, 1); mModel = TUtil.getT(this, 1);
isFirstLoad = true;
isPrepared = true;
if (this instanceof BaseView) mPresenter.setVM(this, mModel, mContext); if (this instanceof BaseView) mPresenter.setVM(this, mModel, mContext);
} }
...@@ -48,8 +48,6 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel> ...@@ -48,8 +48,6 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
View view = inflater.inflate(getLayoutId(), container, false); View view = inflater.inflate(getLayoutId(), container, false);
mKnife = ButterKnife.bind(this, view); mKnife = ButterKnife.bind(this, view);
initView(view); initView(view);
isInit = true;
isCanLoadData();
return view; return view;
} }
...@@ -66,54 +64,50 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel> ...@@ -66,54 +64,50 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
/** /**
* 视图是否已经对用户可见,系统的方法 * 如果是与ViewPager一起使用,调用的是setUserVisibleHint
*/ */
@Override @Override
public void setUserVisibleHint(boolean isVisibleToUser) { public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser); super.setUserVisibleHint(isVisibleToUser);
isCanLoadData();
}
/**
* 是否可以加载数据
* 可以加载数据的条件:
* 1.视图已经初始化
* 2.视图对用户可见
*/
private void isCanLoadData() {
if (!isInit) {
return;
}
if (getUserVisibleHint()) { if (getUserVisibleHint()) {
lazyLoad(); isVisible = true;
isLoad = true; onVisible();
} else { } else {
if (isLoad) { isVisible = false;
stopLoad(); onInvisible();
}
} }
} }
/** /**
* 视图销毁的时候讲Fragment是否初始化的状态变为false * 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged.
* 若是初始就show的Fragment 为了触发该事件 需要先hide再show
*/ */
@Override @Override
public void onDestroyView() { public void onHiddenChanged(boolean hidden) {
super.onDestroyView(); super.onHiddenChanged(hidden);
isInit = false; if (!hidden) {
isLoad = false; isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible() {
doInit();
} }
/** protected void onInvisible() {
* 当视图初始化并且对用户可见的时候去真正的加载数据 }
*/
protected abstract void lazyLoad();
/** protected void doInit() {
* 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法 if (!isPrepared || !isVisible || !isFirstLoad) {
*/ return;
protected void stopLoad() { }
isFirstLoad = false;
lazyLoad();
} }
protected abstract void lazyLoad();
} }
...@@ -14,6 +14,7 @@ import com.dayu.bigfish.R; ...@@ -14,6 +14,7 @@ import com.dayu.bigfish.R;
import com.dayu.bigfish.ui.adapter.FragmentOrderAdapter; import com.dayu.bigfish.ui.adapter.FragmentOrderAdapter;
import com.dayu.bigfish.ui.fragment.OrderDatailsFragment; import com.dayu.bigfish.ui.fragment.OrderDatailsFragment;
import com.dayu.bigfish.ui.fragment.OrderDatailsServeFragment; import com.dayu.bigfish.ui.fragment.OrderDatailsServeFragment;
import com.dayu.bigfish.utils.TabLayoutUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -72,7 +73,7 @@ public class OrderDetailsActivity extends FragmentActivity { ...@@ -72,7 +73,7 @@ public class OrderDetailsActivity extends FragmentActivity {
tablayout.addTab(tablayout.newTab().setText("工单详情")); tablayout.addTab(tablayout.newTab().setText("工单详情"));
tablayout.addTab(tablayout.newTab().setText("服务记录")); tablayout.addTab(tablayout.newTab().setText("服务记录"));
tablayout.setTabMode(TabLayout.MODE_FIXED); tablayout.setTabMode(TabLayout.MODE_FIXED);
TabLayoutUtils.setIndicator(tablayout, 60, 60, R.color.cl_receiving_order_item_data, this);
} }
@OnClick({R.id.order_back, R.id.tablayout}) @OnClick({R.id.order_back, R.id.tablayout})
......
...@@ -7,11 +7,12 @@ import android.support.v4.view.ViewPager; ...@@ -7,11 +7,12 @@ import android.support.v4.view.ViewPager;
import android.view.View; import android.view.View;
import com.dayu.bigfish.R; import com.dayu.bigfish.R;
import com.dayu.bigfish.ui.adapter.FragmentOrderAdapter;
import com.dayu.bigfish.base.BaseFragment; import com.dayu.bigfish.base.BaseFragment;
import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdContract; import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdContract;
import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdModel; import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdModel;
import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdPresenter; import com.dayu.bigfish.presenter.homethiirdtab.HomeThirdPresenter;
import com.dayu.bigfish.ui.adapter.FragmentOrderAdapter;
import com.dayu.bigfish.utils.TabLayoutUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -39,7 +40,6 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom ...@@ -39,7 +40,6 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
@Override @Override
public View initView(View view) { public View initView(View view) {
initData();
return view; return view;
} }
...@@ -50,7 +50,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom ...@@ -50,7 +50,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
@Override @Override
protected void lazyLoad() { protected void lazyLoad() {
initData();
} }
...@@ -65,6 +65,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom ...@@ -65,6 +65,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
messageTablayout.addTab(messageTablayout.newTab().setText("系统通知")); messageTablayout.addTab(messageTablayout.newTab().setText("系统通知"));
messageTablayout.addTab(messageTablayout.newTab().setText("大鱼通知")); messageTablayout.addTab(messageTablayout.newTab().setText("大鱼通知"));
messageTablayout.setTabMode(TabLayout.MODE_FIXED); messageTablayout.setTabMode(TabLayout.MODE_FIXED);
TabLayoutUtils.setIndicator(messageTablayout, 60, 60, R.color.cl_receiving_order_item_data, getActivity());
} }
} }
...@@ -10,7 +10,6 @@ import android.support.v4.app.Fragment; ...@@ -10,7 +10,6 @@ import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.dayu.bigfish.R; import com.dayu.bigfish.R;
...@@ -25,9 +24,8 @@ import com.dayu.bigfish.ui.WorksRecordActivity; ...@@ -25,9 +24,8 @@ import com.dayu.bigfish.ui.WorksRecordActivity;
import com.dayu.bigfish.ui.adapter.FragmentHomeAdapter; import com.dayu.bigfish.ui.adapter.FragmentHomeAdapter;
import com.dayu.bigfish.utils.GetUserInfo; import com.dayu.bigfish.utils.GetUserInfo;
import com.dayu.bigfish.utils.ProgressUtil; import com.dayu.bigfish.utils.ProgressUtil;
import com.dayu.bigfish.utils.UtilsScreen; import com.dayu.bigfish.utils.TabLayoutUtils;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -128,49 +126,8 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec ...@@ -128,49 +126,8 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
homeTabLayout.setupWithViewPager(mViewPager); homeTabLayout.setupWithViewPager(mViewPager);
homeTabLayout.setTabMode(TabLayout.MODE_FIXED); homeTabLayout.setTabMode(TabLayout.MODE_FIXED);
mViewPager.setCurrentItem(0); mViewPager.setCurrentItem(0);
/** homeTabLayout.post(() -> {
* 此处是通过反射更改TabLayout下划线的宽度 TabLayoutUtils.setIndicator(homeTabLayout, 15, 15, R.color.cl_order_item_line_bg, mActivity);
* */
homeTabLayout.post(new Runnable() {
@Override
public void run() {
try {
//拿到tabLayout的mTabStrip属性
Field mTabStripField = homeTabLayout.getClass().getDeclaredField("mTabStrip");
mTabStripField.setAccessible(true);
LinearLayout mTabStrip = (LinearLayout) mTabStripField.get(homeTabLayout);
int dp10 = UtilsScreen.dip2px(mActivity, 10);
for (int i = 0; i < mTabStrip.getChildCount(); i++) {
View tabView = mTabStrip.getChildAt(i);
//拿到tabView的mTextView属性
Field mTextViewField = tabView.getClass().getDeclaredField("mTextView");
mTextViewField.setAccessible(true);
TextView mTextView = (TextView) mTextViewField.get(tabView);
tabView.setPadding(0, 0, 0, 0);
//因为想要的效果是 字多宽线就多宽,所以测量mTextView的宽度
int width = 0;
width = mTextView.getWidth();
if (width == 0) {
mTextView.measure(0, 0);
width = mTextView.getMeasuredWidth();
}
//设置tab左右间距为10dp 注意这里不能使用Padding 因为源码中线的宽度是根据 tabView的宽度来设置的
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();
params.width = width;
params.leftMargin = dp10;
params.rightMargin = dp10;
tabView.setLayoutParams(params);
tabView.invalidate();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}); });
homeTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { homeTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
/** /**
...@@ -238,6 +195,7 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec ...@@ -238,6 +195,7 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
}); });
} }
/** /**
* 请求服务器数据获取tab各状态的数量 * 请求服务器数据获取tab各状态的数量
*/ */
...@@ -327,4 +285,5 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec ...@@ -327,4 +285,5 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
public void getTabNumSuccess(Tab tab) { public void getTabNumSuccess(Tab tab) {
setTabNum(tab, mTabIndex); setTabNum(tab, mTabIndex);
} }
} }
...@@ -79,6 +79,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour ...@@ -79,6 +79,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour
private String userPhone; private String userPhone;
private String evaluate; private String evaluate;
private int mAccountBalance; private int mAccountBalance;
private boolean isFirst = true;
public static HomePersonFragment newInstance() { public static HomePersonFragment newInstance() {
Bundle args = new Bundle(); Bundle args = new Bundle();
...@@ -116,6 +117,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour ...@@ -116,6 +117,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour
return R.layout.activity_personal_center; return R.layout.activity_personal_center;
} }
@Override @Override
protected void lazyLoad() { protected void lazyLoad() {
ProgressUtil.startLoad(mContext); ProgressUtil.startLoad(mContext);
......
...@@ -55,14 +55,14 @@ public class OrderFirstTabFragment extends BaseFragment<OrderTabPresenter, Order ...@@ -55,14 +55,14 @@ public class OrderFirstTabFragment extends BaseFragment<OrderTabPresenter, Order
mAdapter.disableLoadMoreIfNotFullPage(mRecyclerView); mAdapter.disableLoadMoreIfNotFullPage(mRecyclerView);
mRefreshLayout.setOnRefreshListener(this); mRefreshLayout.setOnRefreshListener(this);
mAdapter.setOnLoadMoreListener(this, mRecyclerView); mAdapter.setOnLoadMoreListener(this, mRecyclerView);
ProgressUtil.startLoad(mContext);
mPresenter.getWatingOrder(Constants.APPOIMENT_ORDER, userId, siteId, mPage, mPageSize);
initListener(); initListener();
return view; return view;
} }
@Override @Override
protected void lazyLoad() { protected void lazyLoad() {
ProgressUtil.startLoad(mContext);
mPresenter.getWatingOrder(Constants.APPOIMENT_ORDER, userId, siteId, mPage, mPageSize);
} }
@Override @Override
......
package com.dayu.bigfish.utils;
import android.app.Activity;
import android.content.res.Resources;
import android.support.design.widget.TabLayout;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import java.lang.reflect.Field;
/**
* Created by luofan on 2017/11/24.
*/
public class TabLayoutUtils {
/**
* @author Dell
* @time 2017/9/11 10:54
* @description: tabLayout 下划线 长度
*/
/**
* tabLayout 下划线 长度
*/
public static void setIndicator(TabLayout tabs, int leftDip, int rightDip, int color, Activity activity) {
Class<?> tabLayout = tabs.getClass();
Field tabStrip = null;
try {
tabStrip = tabLayout.getDeclaredField("mTabStrip");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
tabStrip.setAccessible(true);
LinearLayout llTab = null;
try {
llTab = (LinearLayout) tabStrip.get(tabs);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics());
int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics());
for (int i = 0; i < llTab.getChildCount(); i++) {
View child = llTab.getChildAt(i);
child.setPadding(0, 0, 0, 0);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);
params.leftMargin = left;
params.rightMargin = right;
child.setLayoutParams(params);
child.invalidate();
}
tabs.setSelectedTabIndicatorColor(activity.getResources().getColor(color));
}
}
...@@ -5,7 +5,7 @@ buildscript { ...@@ -5,7 +5,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment