FragmentPagerAdapter是PagerAdapter中的其中一种实现。它将每一个页面表示为一个 Fragment,并且每一个Fragment都将会保存到fragment manager当中。而且,当用户没可能再次回到页面的时候,fragment manager才会将这个Fragment销毁。
这种pager十分适用于有一些静态fragment,例如一组tabs,的时候使用。每个页面对应的Fragment当用户可以访问的时候会一直存在内存中,但是,当这个页面不可见的时候,view hierarchy将会被销毁。这样子会导致应用程序占有太多资源。当页面数量比较大的时候,建议使用 FragmentStatePagerAdapter。
当使用FragmentPagerAdapter的时候,ViewPager一定要使用正确的ID set。
FragmentPagerAdapter的子类只要实现 getItem(int) 和 getCount()方法。
下面是示例代码:
publicclassFragmentPagerSupportextendsFragmentActivity{
static final int NUM_ITEMS =10;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
**mAdapter =newMyAdapter(getSupportFragmentManager());**
mPager =(ViewPager)findViewById(R.id.pager);
**mPager**.setAdapter(mAdapter);
Button button =(Button)findViewById(R.id.goto_first);
button.setOnClickListener(newOnClickListener(){
publicvoid onClick(View v){
mPager.setCurrentItem(0);
}
});
button =(Button)findViewById(R.id.goto_last);
button.setOnClickListener(newOnClickListener(){
publicvoid onClick(View v){
mPager.setCurrentItem(NUM_ITEMS-1);
}
});
}
public static class MyAdapter extends **FragmentPagerAdapter**{
publicMyAdapter(FragmentManager fm){
super(fm);
}
@Override
publicint getCount(){
return NUM_ITEMS;
}
@Override
publicFragment getItem(int position){
return **ArrayListFragment.newInstance(position);**
}
}
public static class ArrayListFragment extends ListFragment{
int mNum;
static ArrayListFragment **newInstance(int num)**{
ArrayListFragment f =new ArrayListFragment();
Bundle args =newBundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mNum = getArguments()!=null? getArguments().getInt("num"):1;
}
@Override
publicView onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_pager_list, container,false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("Fragment #"+ mNum);
return v;
}
@Override
publicvoid onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(newArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1,Cheeses.sCheeseStrings));
}
@Override
publicvoid onListItemClick(ListView l,View v,int position,long id){
Log.i("FragmentList","Item clicked: "+ id);
}
}
}