原创
android中ViewPager 与 Fragment
在实际的开发过程中,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 的优势还有很多,这里不做过多讲解.
android studio工具及手机模拟器以及更多工程源代码下载请前往微信公众号:大鸟科创空间,回复:android studio即可获取。
作者: 大鸟科创空间, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3949041.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论