天天看點

【Android基礎知識】FragmentPagerAdapter和FragmentStatePagerAdapter

FragmentPagerAdapter 會一次性加載所有的Fragment到記憶體,不會再去建立和銷毀。

MyFragmentPagerAdapter.java

/**
 * FragmentPagerAdapter一次性加載所有Fragment,不會去銷毀Fragment
 * @author meng.li
 *
 */
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
	private List<Fragment> fragLists;
	private List<String> titelList;
	public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragLists,List<String> titelList) {
		super(fm);
		this.fragLists = fragLists;
		this.titelList = titelList;
	}
	@Override
	public Fragment getItem(int arg0) {
		// TODO Auto-generated method stub
		return fragLists.get(arg0);
	}
	@Override
	public CharSequence getPageTitle(int position) {
		// TODO Auto-generated method stub
		return titelList.get(position);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return fragLists.size();
	}
}
           

MyActivity.java

/*
 * 繼承FragmentActivity 是為了相容Android3.0 以前的也可以使用Fragment
 */
public class MyActivity extends FragmentActivity implements OnPageChangeListener{
	private ViewPager viewPager;
	private PagerTabStrip tab;
	private List<Fragment> fragLists;
	//标題
	private List<String> titleList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager);
        titleList = new ArrayList<String>();
        
        titleList.add("第一頁");
        titleList.add("第二頁");
        titleList.add("第三頁");
        titleList.add("第四頁");
        
        viewPager = (ViewPager)findViewById(R.id.pager);
        tab = (PagerTabStrip)findViewById(R.id.tab);
        //為PagerTabStrip設定一些屬性
        tab.setBackgroundColor(Color.YELLOW);
        tab.setTextColor(Color.RED);
        tab.setDrawFullUnderline(false);
        tab.setTabIndicatorColor(Color.GREEN);
        
        /**
         * 通過fragment作為ViewPager的資料源
         */
        fragLists = new ArrayList<Fragment>();
        fragLists.add(new Fragment1());
        fragLists.add(new Fragment2());
        fragLists.add(new Fragment3());
        fragLists.add(new Fragment4());
        //建立PagerAdapter的擴充卡,
        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragLists, titleList);
        viewPager.setAdapter(adapter);
        viewPager.setOnPageChangeListener(this);
    }
	@Override
	public void onPageScrollStateChanged(int arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onPageSelected(int arg0) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "目前是第"+arg0+"個頁面", Toast.LENGTH_SHORT).show();
	}
}
           

FragmentStatePagerAdapter 會進行Fragment的建立和銷毀

MyFragmentStatePagerAdapter.java

public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter{
	private List<Fragment> fragLists;
	private List<String> titelList;
	public MyFragmentStatePagerAdapter(FragmentManager fm,List<Fragment> fragLists,List<String> titelList) {
		super(fm);
		this.fragLists = fragLists;
		this.titelList = titelList;
	}
	@Override
	public Fragment getItem(int arg0) {
		// TODO Auto-generated method stub
		return fragLists.get(arg0);
	}
	@Override
	public CharSequence getPageTitle(int position) {
		// TODO Auto-generated method stub
		return titelList.get(position);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return fragLists.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);
	}
}
           

建立方法

MyFragmentStatePagerAdapter adapter = new MyFragmentStatePagerAdapter(getSupportFragmentManager(), fragLists, titleList);
viewPager.setAdapter(adapter);