原创 android中ViewPager 与 Fragment

2021-6-16 14:15 2060 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 类的类,代码如下

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();
  • }
  • }
  • 复制代码

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

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

    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

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

    PARTNER CONTENT

    文章评论0条评论)

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