viewpager &&ragment 生命周期

本文探讨了在使用TabLayout和ViewPager组合时,Fragment的生命周期。作者通过分析滑动ViewPager时Fragment的生命周期变化,展示了从加载Fragment_1到在不同滑动状态下Fragment的onAttach()到onResume()等方法的执行情况。作者指出,ViewPager会保留包括当前显示Fragment在内的左右两侧各一个Fragment的信息,以实现快速切换。当Activity结束时,Fragment的10_onDestroy()和11_onDetach()会被调用。
摘要由CSDN通过智能技术生成

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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值