1.一直以来的疑问
Fragment在ViewPager到底经历了哪些生命周期方法?到底发生了什么?
常会TabLayout和ViewPager配合起来使用,针对这套组合,就想也做一些学习了解。在一个ViewPager中经常会存在多个Fragment,Fragemnt在ViewPager中的生命周期一直没有闹明白。这周正好在测试Api的时候又用到了TabLayout和ViewPager组合。ViewPager中的Fragment并想做到延迟加载,在可见的时候再进行网络请求。在敲代码的时候想到到几个问题:
在ViewPager中,滑动时,Fragment会经历哪些生命周期? ViewPager的setOffscreenPageLimit()方法对Fragment有哪些影响? 在ViewPager中,Fragment的setUserVisibleHint()对Fragment的生命周期有哪些影响? 点击TabLayout的Tab时,Fragment经历的生命周期和滑动ViewPager有啥不一样?现在有个明确的需要:在TabLayout和ViewPager这个组合下,实现Fragment的延迟加载。
2.Tablayout、ViewPager组合
代码很简单,就是新建一个Android Stuido工程,一个Activity里面有一个TabLayout和ViewPager,ViewPager中四个Fragment。
2.1布局文件
Acivity的布局文件:
1
2
3
4
5
6
7
8
9
10
11
|
</android.support.design.widget.tablayout></android.support.v7.widget.toolbar></android.support.design.widget.appbarlayout>
</android.support.v4.view.viewpager></android.support.design.widget.coordinatorlayout>
|
主要是CoordinatorLayout、AppBarLayout和Toolabr的使用。如果基础的用法不知道的话可以看看CoordinatorLayout、Tablayout、Toolbar简单组合使用,我写的很基础的用法。啊哈哈 :)
Fragment的布局:
1
2
3
4
5
|
<framelayout android:layout_height=
"match_parent"
android:layout_width=
"match_parent"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<textview android:gravity=
"center"
android:layout_height=
"match_parent"
android:layout_width=
"match_parent"
android:text=
"1"
android:textcolor=
"@color/colorPrimary"
android:textsize=
"150sp"
>
</textview></android.support.v4.widget.nestedscrollview>
</framelayout>
|
Fragmentde的布局更加简单,主要就一个TextView。4个Fragment布局一样,就贴出一个。
2.2Actiity代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
public
class
MainActivity
extends
AppCompatActivity {
private
TabLayout tabLayout;
private
ViewPager viewPager;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initView();
}
private
void
initView() {
tabLayout = (TabLayout) findViewById(R.id.tab_main_activity);
viewPager = (ViewPager) findViewById(R.id.vp_main_activity);
ViewPagerAdapter adapter =
new
ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
|