在实际的开发过程中,ViewPager 与 Fragment 组合使用是比较常见的,而对于 fragment,它所使用的适配器是FragmentPagerAdapter。FragmentPagerAdapter 继承自PagerAdapter类,用于呈现Fragment页面。这些Fragment页面会一直保存在FragmentManager中,以便用户随时取用。
这个适配器最好用于有限个静态 fagment页面的管理。尽管不可见的视图有时会被销毁,但用户所有访问过的 fragmemt 都会被保存在内存中。因此 fragment实例会保存大量的各种状态,这就造成了很大的内存开销。如果要处理大量的页面切换,就可以使用FragmentStatePager-Adaper。
每一个使用FragmentPagerAdapter 的 ViewPager 都要有一个有效的ID 集合,有效ID的集合就是Fragment的集合。对于FragmentPagerAdapter 的子类,只需要重写getltem(int position)和 getCount()就可以了。
创建一个继承 FragmentPagerAdapter 类的类,代码如下∶
package com.rfstar.viewpagertest02;
import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentManager;import androidx.fragment.app.FragmentPagerAdapter;import java.util.List;public class FragmentAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; public FragmentAdapter(FragmentManager fm,List<Fragment> fragments) { super(fm); this.fragmentList=fragments; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); }}复制代码重写的两个方法的作用很明显:getItem(int postion)是根据位置获取Fragment,geCount()是用来获取列表数量的。
下面创建3个Fragment类,代码如下∶
package com.rfstar.viewpagertest02;
import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.fragment.app.Fragment;public class FirstFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){ return inflater.inflate(R.layout.fragment_first,container,false); }}其他两个Frgment 类与之没有区别,对应的布局文件只添加了一个文本框,展示一行文字。fragment_first.xml布局文件代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是第一个fragment"/></LinearLayout><p class="p" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;text-indent:0.0000pt;mso-pagination:widow-orphan;">其余两个布局文件代码将不再附上。复制代码 在 Actvity类中调用适配器以及 Fragment 类,并将之与 ViewPager 进行整合。代码与展示3个普通页面的代码没有实质区别,MainActivity中的代码如下:
package com.rfstar.viewpagertest02;
import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentManager;import androidx.viewpager.widget.ViewPager;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager=(ViewPager)findViewById(R.id.viewPager); FragmentManager fragmentManager=getSupportFragmentManager(); List<Fragment> fragments=new ArrayList<Fragment>(); fragments.add(new FirstFragment()); fragments.add(new SecondFragment()); fragments.add(new ThirdFragment()); FragmentAdapter fragmentAdapter=new FragmentAdapter(fragmentManager,fragments); viewPager.setAdapter(fragmentAdapter); }}复制代码运行应用的效果如下图可以实现左右滑动,在 Fragment中可以做各种操作,如保存用户数据,这些都是单纯的页面做不到的。使用 Fragment 的优势还有很多,这里不做过多讲解.
![](https://static.assets-stash.eet-china.com/album/202106/16/140851w7i8bt3eoeew7z7o.png)
![](https://static.assets-stash.eet-china.com/album/202106/16/140859cmgy6cq71fwa11ae.png)
![](https://static.assets-stash.eet-china.com/album/202106/16/140907ragfludqlgyfypou.png)
android studio工具及手机模拟器以及更多工程源代码下载请前往微信公众号:大鸟科创空间,回复:android studio即可获取。
![](https://static.assets-stash.eet-china.com/album/202106/16/141525jska6iait8lt5aso.jpg)
文章评论(0条评论)
登录后参与讨论