您的位置:首页 > 移动开发 > Android开发

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

2017-02-20 00:40 393 查看
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
re
b5a4
turn 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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息