Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
android
/
dayu
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
69f3ec50
authored
Nov 25, 2017
by
罗翻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fragment增加懒加载
parent
83a71781
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
108 additions
and
93 deletions
app/src/main/java/com/dayu/bigfish/base/BaseFragment.java
app/src/main/java/com/dayu/bigfish/ui/OrderDetailsActivity.java
app/src/main/java/com/dayu/bigfish/ui/fragment/HomeMessageTabFragment.java
app/src/main/java/com/dayu/bigfish/ui/fragment/HomeOrderFragment.java
app/src/main/java/com/dayu/bigfish/ui/fragment/HomePersonFragment.java
app/src/main/java/com/dayu/bigfish/ui/fragment/OrderFirstTabFragment.java
app/src/main/java/com/dayu/bigfish/utils/TabLayoutUtils.java
build.gradle
app/src/main/java/com/dayu/bigfish/base/BaseFragment.java
View file @
69f3ec50
...
...
@@ -21,11 +21,9 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
public
T
mPresenter
;
public
E
mModel
;
private
Unbinder
mKnife
;
/**
* 视图是否已经初初始化
*/
protected
boolean
isInit
=
false
;
protected
boolean
isLoad
=
false
;
private
boolean
isVisible
;
//是否可见状态
private
boolean
isPrepared
;
//标志位,View已经初始化完成。
private
boolean
isFirstLoad
=
true
;
@Override
...
...
@@ -39,6 +37,8 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
super
.
onCreate
(
savedInstanceState
);
mPresenter
=
TUtil
.
getT
(
this
,
0
);
mModel
=
TUtil
.
getT
(
this
,
1
);
isFirstLoad
=
true
;
isPrepared
=
true
;
if
(
this
instanceof
BaseView
)
mPresenter
.
setVM
(
this
,
mModel
,
mContext
);
}
...
...
@@ -48,8 +48,6 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
View
view
=
inflater
.
inflate
(
getLayoutId
(),
container
,
false
);
mKnife
=
ButterKnife
.
bind
(
this
,
view
);
initView
(
view
);
isInit
=
true
;
isCanLoadData
();
return
view
;
}
...
...
@@ -66,54 +64,50 @@ public abstract class BaseFragment<T extends BasePresenter, E extends BaseModel>
/**
*
视图是否已经对用户可见,系统的方法
*
如果是与ViewPager一起使用,调用的是setUserVisibleHint
*/
@Override
public
void
setUserVisibleHint
(
boolean
isVisibleToUser
)
{
super
.
setUserVisibleHint
(
isVisibleToUser
);
isCanLoadData
();
}
/**
* 是否可以加载数据
* 可以加载数据的条件:
* 1.视图已经初始化
* 2.视图对用户可见
*/
private
void
isCanLoadData
()
{
if
(!
isInit
)
{
return
;
}
if
(
getUserVisibleHint
())
{
lazyLoad
()
;
isLoad
=
true
;
isVisible
=
true
;
onVisible
()
;
}
else
{
if
(
isLoad
)
{
stopLoad
();
}
isVisible
=
false
;
onInvisible
();
}
}
/**
* 视图销毁的时候讲Fragment是否初始化的状态变为false
* 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged.
* 若是初始就show的Fragment 为了触发该事件 需要先hide再show
*/
@Override
public
void
onDestroyView
()
{
super
.
onDestroyView
();
isInit
=
false
;
isLoad
=
false
;
public
void
onHiddenChanged
(
boolean
hidden
)
{
super
.
onHiddenChanged
(
hidden
);
if
(!
hidden
)
{
isVisible
=
true
;
onVisible
();
}
else
{
isVisible
=
false
;
onInvisible
();
}
}
protected
void
onVisible
()
{
doInit
();
}
/**
* 当视图初始化并且对用户可见的时候去真正的加载数据
*/
protected
abstract
void
lazyLoad
();
protected
void
onInvisible
()
{
}
/**
* 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法
*/
protected
void
stopLoad
()
{
protected
void
doInit
()
{
if
(!
isPrepared
||
!
isVisible
||
!
isFirstLoad
)
{
return
;
}
isFirstLoad
=
false
;
lazyLoad
();
}
protected
abstract
void
lazyLoad
();
}
app/src/main/java/com/dayu/bigfish/ui/OrderDetailsActivity.java
View file @
69f3ec50
...
...
@@ -14,6 +14,7 @@ import com.dayu.bigfish.R;
import
com.dayu.bigfish.ui.adapter.FragmentOrderAdapter
;
import
com.dayu.bigfish.ui.fragment.OrderDatailsFragment
;
import
com.dayu.bigfish.ui.fragment.OrderDatailsServeFragment
;
import
com.dayu.bigfish.utils.TabLayoutUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -72,7 +73,7 @@ public class OrderDetailsActivity extends FragmentActivity {
tablayout
.
addTab
(
tablayout
.
newTab
().
setText
(
"工单详情"
));
tablayout
.
addTab
(
tablayout
.
newTab
().
setText
(
"服务记录"
));
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
})
...
...
app/src/main/java/com/dayu/bigfish/ui/fragment/HomeMessageTabFragment.java
View file @
69f3ec50
...
...
@@ -7,11 +7,12 @@ import android.support.v4.view.ViewPager;
import
android.view.View
;
import
com.dayu.bigfish.R
;
import
com.dayu.bigfish.ui.adapter.FragmentOrderAdapter
;
import
com.dayu.bigfish.base.BaseFragment
;
import
com.dayu.bigfish.presenter.homethiirdtab.HomeThirdContract
;
import
com.dayu.bigfish.presenter.homethiirdtab.HomeThirdModel
;
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.List
;
...
...
@@ -39,7 +40,6 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
@Override
public
View
initView
(
View
view
)
{
initData
();
return
view
;
}
...
...
@@ -50,7 +50,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
@Override
protected
void
lazyLoad
()
{
initData
();
}
...
...
@@ -65,6 +65,7 @@ public class HomeMessageTabFragment extends BaseFragment<HomeThirdPresenter, Hom
messageTablayout
.
addTab
(
messageTablayout
.
newTab
().
setText
(
"系统通知"
));
messageTablayout
.
addTab
(
messageTablayout
.
newTab
().
setText
(
"大鱼通知"
));
messageTablayout
.
setTabMode
(
TabLayout
.
MODE_FIXED
);
TabLayoutUtils
.
setIndicator
(
messageTablayout
,
60
,
60
,
R
.
color
.
cl_receiving_order_item_data
,
getActivity
());
}
}
app/src/main/java/com/dayu/bigfish/ui/fragment/HomeOrderFragment.java
View file @
69f3ec50
...
...
@@ -10,7 +10,6 @@ import android.support.v4.app.Fragment;
import
android.support.v4.view.ViewPager
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
com.dayu.bigfish.R
;
...
...
@@ -25,9 +24,8 @@ import com.dayu.bigfish.ui.WorksRecordActivity;
import
com.dayu.bigfish.ui.adapter.FragmentHomeAdapter
;
import
com.dayu.bigfish.utils.GetUserInfo
;
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.List
;
...
...
@@ -128,49 +126,8 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
homeTabLayout
.
setupWithViewPager
(
mViewPager
);
homeTabLayout
.
setTabMode
(
TabLayout
.
MODE_FIXED
);
mViewPager
.
setCurrentItem
(
0
);
/**
* 此处是通过反射更改TabLayout下划线的宽度
* */
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
.
post
(()
->
{
TabLayoutUtils
.
setIndicator
(
homeTabLayout
,
15
,
15
,
R
.
color
.
cl_order_item_line_bg
,
mActivity
);
});
homeTabLayout
.
setOnTabSelectedListener
(
new
TabLayout
.
OnTabSelectedListener
()
{
/**
...
...
@@ -238,6 +195,7 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
});
}
/**
* 请求服务器数据获取tab各状态的数量
*/
...
...
@@ -327,4 +285,5 @@ public class HomeOrderFragment extends BaseFragment<HomeSecondPresenter, HomeSec
public
void
getTabNumSuccess
(
Tab
tab
)
{
setTabNum
(
tab
,
mTabIndex
);
}
}
app/src/main/java/com/dayu/bigfish/ui/fragment/HomePersonFragment.java
View file @
69f3ec50
...
...
@@ -79,6 +79,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour
private
String
userPhone
;
private
String
evaluate
;
private
int
mAccountBalance
;
private
boolean
isFirst
=
true
;
public
static
HomePersonFragment
newInstance
()
{
Bundle
args
=
new
Bundle
();
...
...
@@ -116,6 +117,7 @@ public class HomePersonFragment extends BaseFragment<HomeFourPresenter, HomeFour
return
R
.
layout
.
activity_personal_center
;
}
@Override
protected
void
lazyLoad
()
{
ProgressUtil
.
startLoad
(
mContext
);
...
...
app/src/main/java/com/dayu/bigfish/ui/fragment/OrderFirstTabFragment.java
View file @
69f3ec50
...
...
@@ -55,14 +55,14 @@ public class OrderFirstTabFragment extends BaseFragment<OrderTabPresenter, Order
mAdapter
.
disableLoadMoreIfNotFullPage
(
mRecyclerView
);
mRefreshLayout
.
setOnRefreshListener
(
this
);
mAdapter
.
setOnLoadMoreListener
(
this
,
mRecyclerView
);
ProgressUtil
.
startLoad
(
mContext
);
mPresenter
.
getWatingOrder
(
Constants
.
APPOIMENT_ORDER
,
userId
,
siteId
,
mPage
,
mPageSize
);
initListener
();
return
view
;
}
@Override
protected
void
lazyLoad
()
{
ProgressUtil
.
startLoad
(
mContext
);
mPresenter
.
getWatingOrder
(
Constants
.
APPOIMENT_ORDER
,
userId
,
siteId
,
mPage
,
mPageSize
);
}
@Override
...
...
app/src/main/java/com/dayu/bigfish/utils/TabLayoutUtils.java
0 → 100644
View file @
69f3ec50
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
));
}
}
build.gradle
View file @
69f3ec50
...
...
@@ -5,7 +5,7 @@ buildscript {
jcenter
()
}
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
'org.greenrobot:greendao-gradle-plugin:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment