Android——FragmentPagerAdapter和FragmentStatePagerAdapter的使用...

本文详细介绍了FragmentPagerAdapter和FragmentStatePagerAdapter的区别及使用方法。前者适用于页面较少且静态的应用场景,后者则适用于页面数量较多且数据动态变化的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FragmentPagerAdapter相比之前的PagerAdapter,并不是需要得到4个view对象,而是通过4个Fragment类来对应4个布局文

件。

FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。

该类内的每一个生成的 Fragment 都将保存在内存之中,注意是全部的Fragment,因此适用于那些相对静态的页,数量也比较少

的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。

先来看FragmentPagerAdapter:

在上一个项目中需要改几项:

1、创建4个Fragment,加载对应的布局view。

public class Fragment1 extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        return inflater.inflate(R.layout.view1, container, false);
    }
}

2、在Mainactivity中添加Fragment容器list。

    private List<Fragment> fraglist;//上面声明

    fraglist=new ArrayList<Fragment>();
        fraglist.add(new Fragment1());
        fraglist.add(new Fragment2());
        fraglist.add(new Fragment3());
        fraglist.add(new Fragment4());

3、创建适配器MyFragmentPagerAdapter:

package com.example.viewpagertest;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fraglist;
    private List<String> tablist;

    public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fraglist, List<String> tablist) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.fraglist = fraglist;
        this.tablist = tablist;

    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return fraglist.get(arg0);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // TODO Auto-generated method stub
        return tablist.get(position);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fraglist.size();
    }

}

4、加载适配器

//      创建FragmentPagerAdapter
        MyFragmentPagerAdapter adapter1=new MyFragmentPagerAdapter(getSupportFragmentManager(), fraglist, tablist);
        pager.setAdapter(adapter1);

FragmentStatePagerAdapter,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而

在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大

量的内存。

只需要替换下代码即可验证:

FragmentStatePagerAdapter:

package com.example.viewpagertest;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter{
    private List<Fragment> fraglist;
    private List<String> tablist;
    public MyFragmentStatePagerAdapter(FragmentManager fm,List<Fragment> fraglist,List<String> tablist) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.fraglist=fraglist;
        this.tablist=tablist;

    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return fraglist.get(arg0);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // TODO Auto-generated method stub
        return tablist.get(position);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fraglist.size();
    }
    //创建
    @Override
    public Object instantiateItem(ViewGroup arg0, int arg1) {
        // TODO Auto-generated method stub
        return super.instantiateItem(arg0, arg1);
    }
    //销毁
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        super.destroyItem(container, position, object);
    }

}

我们在第四个Fragment类中添加destroy方法,销毁时log打印一下:

package com.example.viewpagertest;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment4 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        return inflater.inflate(R.layout.view4, container, false);

    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.i("lpl", "我被销毁了");
    }
}

返回第二个页面,第四个已经被销毁。

这里写图片描述

创建FragmentStatePagerAdapter类:


//      创建FragmentStatePagerAdapter
        MyFragmentStatePagerAdapter adapter2=new MyFragmentStatePagerAdapter(getSupportFragmentManager(), fraglist, tablist);

        pager.setAdapter(adapter2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值