原创 android中ViewPager 与 Fragment

2021-6-16 14:15 1993 19 19 分类: 软件与OS 文集: android studio

在实际的开发过程中,ViewPager Fragment 组合使用是比较常见的,而对于 fragment,它所使用的适配器是FragmentPagerAdapterFragmentPagerAdapter 继承自PagerAdapter类,用于呈现Fragment页面。这些Fragment页面会一直保存在FragmentManager中,以便用户随时取用。

这个适配器最好用于有限个静态 fagment页面的管理。尽管不可见的视图有时会被销毁,但用户所有访问过的 fragmemt 都会被保存在内存中。因此 fragment实例会保存大量的各种状态,这就造成了很大的内存开销。如果要处理大量的页面切换,就可以使用FragmentStatePager-Adaper

每一个使用FragmentPagerAdapter ViewPager 都要有一个有效的ID 集合,有效ID的集合就是Fragment的集合。对于FragmentPagerAdapter 的子类,只需要重写getltemint position)和 getCount()就可以了。

创建一个继承 FragmentPagerAdapter 类的类,代码如下

  1. package com.rfstar.viewpagertest02;
  2. import androidx.fragment.app.Fragment;
  3. import androidx.fragment.app.FragmentManager;
  4. import androidx.fragment.app.FragmentPagerAdapter;
  5. import java.util.List;
  6. public class FragmentAdapter extends FragmentPagerAdapter {
  7. private List<Fragment> fragmentList;
  8. public FragmentAdapter(FragmentManager fm,List<Fragment> fragments) {
  9. super(fm);
  10. this.fragmentList=fragments;
  11. }
  12. @Override
  13. public Fragment getItem(int position) {
  14. return fragmentList.get(position);
  15. }
  16. @Override
  17. public int getCount() {
  18. return fragmentList.size();
  19. }
  20. }

重写的两个方法的作用很明显:getItemint postion)是根据位置获取FragmentgeCount()是用来获取列表数量的。

下面创建3Fragment类,代码如下

  1. package com.rfstar.viewpagertest02;
  2. import android.os.Bundle;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import androidx.fragment.app.Fragment;
  7. public class FirstFragment extends Fragment {
  8. @Override
  9. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
  10. return inflater.inflate(R.layout.fragment_first,container,false);
  11. }
  12. }
  13. 其他两个Frgment 类与之没有区别,对应的布局文件只添加了一个文本框,展示一行文字。fragment_first.xml布局文件代码如下:
  14. <?xml version="1.0" encoding="utf-8"?>
  15. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent">
  18. <TextView
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="这是第一个fragment"/>
  22. </LinearLayout>
  23. <p class="p" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;
  24. margin-left:0.0000pt;text-indent:0.0000pt;mso-pagination:widow-orphan;">其余两个布局文件代码将不再附上。
 

Actvity类中调用适配器以及 Fragment 类,并将之与 ViewPager 进行整合。代码与展示3个普通页面的代码没有实质区别,MainActivity中的代码如下:

  1. package com.rfstar.viewpagertest02;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.fragment.app.Fragment;
  4. import androidx.fragment.app.FragmentManager;
  5. import androidx.viewpager.widget.ViewPager;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. public class MainActivity extends AppCompatActivity {
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. ViewPager viewPager=(ViewPager)findViewById(R.id.viewPager);
  17. FragmentManager fragmentManager=getSupportFragmentManager();
  18. List<Fragment> fragments=new ArrayList<Fragment>();
  19. fragments.add(new FirstFragment());
  20. fragments.add(new SecondFragment());
  21. fragments.add(new ThirdFragment());
  22. FragmentAdapter fragmentAdapter=new FragmentAdapter(fragmentManager,fragments);
  23. viewPager.setAdapter(fragmentAdapter);
  24. }
  25. }

运行应用的效果如下图可以实现左右滑动, Fragment中可以做各种操作,如保存用户数据,这些都是单纯的页面做不到的。使用 Fragment 的优势还有很多,这里不做过多讲解.

android studio工具及手机模拟器以及更多工程源代码下载请前往微信公众号:大鸟科创空间,回复:android studio即可获取。

作者: 大鸟科创空间, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3949041.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
19
关闭 站长推荐上一条 /2 下一条