Android FragmentPagerAdapter翻译
2014-03-10 15:50
423 查看
public abstract class
这种页面十分适用于有一些静态的fragment,例如一组tabs,用户访问的每一个页面都会保存在内存中,尽管当view不可见时可能会被销毁。这就会导致应用程序会占用太多的资源,所以,通常当页面数据量过大时使用FragmentStatePagerAdapter来代替FragmentPagerAdapter
当使用FragmentPageAdapter时ViewPager必须有一个ID。
子类只需要实现适配器的getItem(int)和getCount()方法
下面是官方给出的一个例子:
The
The
FragmentPagerAdapter
extends PagerAdapterjava.lang.Object | ||
↳ | android.support.v4.view.PagerAdapter | |
↳ | android.support.v4.app.FragmentPagerAdapter |
Class Overview
它是PagerAdapter的一种实现,每一个页面都是一个Fragment,并且每一个页面都会保存到fragment manager中,当用户没有可能回到该页面时fragment manager才会将这个fragment销毁。这种页面十分适用于有一些静态的fragment,例如一组tabs,用户访问的每一个页面都会保存在内存中,尽管当view不可见时可能会被销毁。这就会导致应用程序会占用太多的资源,所以,通常当页面数据量过大时使用FragmentStatePagerAdapter来代替FragmentPagerAdapter
当使用FragmentPageAdapter时ViewPager必须有一个ID。
子类只需要实现适配器的getItem(int)和getCount()方法
下面是官方给出的一个例子:
publicclassFragmentPagerSupportextendsFragmentActivity{ staticfinalint 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); // Watch for button clicks. 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); } }); } publicstaticclassMyAdapterextendsFragmentPagerAdapter{ publicMyAdapter(FragmentManager fm){ super(fm); } @Override publicint getCount(){ return NUM_ITEMS; } @Override publicFragment getItem(int position){ returnArrayListFragment.newInstance(position); } } publicstaticclassArrayListFragmentextendsListFragment{ int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument. */ staticArrayListFragment newInstance(int num){ ArrayListFragment f =newArrayListFragment(); // Supply num input as an argument. Bundle args =newBundle(); args.putInt("num", num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments. */ @Override publicvoid onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mNum = getArguments()!=null? getArguments().getInt("num"):1; } /** * The Fragment's UI is just a simple text view showing its * instance number. */ @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); } } }
The
R.layout.fragment_pagerresource of the top-level fragment is:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:padding="4dip" android:gravity="center_horizontal" android:layout_width="match_parent"android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1"> </android.support.v4.view.ViewPager> <LinearLayoutandroid:orientation="horizontal" android:gravity="center"android:measureWithLargestChild="true" android:layout_width="match_parent"android:layout_height="wrap_content" android:layout_weight="0"> <Buttonandroid:id="@+id/goto_first" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/first"> </Button> <Buttonandroid:id="@+id/goto_last" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/last"> </Button> </LinearLayout> </LinearLayout>
The
R.layout.fragment_pager_listresource containing each individual fragment's layout is:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:drawable/gallery_thumb"> <TextViewandroid:id="@+id/text" android:layout_width="match_parent"android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/hello_world"/> <!-- The frame layout is here since we will be showing either the empty view or the list view. --> <FrameLayout android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"> <!-- Here is the list. Since we are using a ListActivity, we have to call it "@android:id/list" so ListActivity will find it --> <ListViewandroid:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false"/> <!-- Here is the view to show if the list is emtpy --> <TextViewandroid:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceMedium" android:text="No items."/> </FrameLayout> </LinearLayout>
Summary
[Expand] Inherited Constants |
---|
From class android.support.v4.view.PagerAdapter |
Public Constructors | |
---|---|
FragmentPagerAdapter(FragmentManager fm) 构造方法,需要传入一个FragmentManager |
Public Methods | |
---|---|
void | destroyItem(ViewGroup container, int position, Object object) 根据给定的position移除一个page页 |
void | finishUpdate(ViewGroup container) 当页面数据加载完成时调用该方法 |
abstract Fragment | getItem(int position) 返回指定位置的相关fragment |
long | getItemId(int position) 返回给定位置的item的标示符 |
Object | instantiateItem(ViewGroup container, int position) 在给定的位置处创建一个page |
boolean | isViewFromObject(View view, Object object) Determines whether a page View is associated with a specific key object as returned by instantiateItem(ViewGroup, int). |
void | restoreState(Parcelable state, ClassLoader loader) 恢复所有的通过saveState()方法保存的与adapter关联的页面实例状态 |
Parcelable | saveState() 保存所有与adapter相关的页面实例。直到调用restoreState方法是恢复 |
void | setPrimaryItem(ViewGroup container, int position, Object object) Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page. |
void | startUpdate(ViewGroup container) 当页面将要被显示时调用 |
相关文章推荐
- Android ViewPager的FragmentPagerAdapter中Fragment不重新加载数据,并且使用的是其他缓存的Framgnet的问题
- Android viewpagerfragment,FragmentPagerAdapter使用demo
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- android 解决FragmentStatePagerAdapter 刷新无效问题
- Android中FragmentPagerAdapter对Fragment的缓存(二)
- 【Android】保存Fragment切换状态 FragmentPagerAdapter
- 关于Fragment中两个FragmentPagerAdapter和FragmentStatePag的用法 http://www.apkbus.com/Android-90417-1-1.html
- 【Android】从源码分析PagerAdapter/FragmentPagerAdapter调用notifydataSetChanged()刷新的原理
- Android中ViewPager使用FragmentPagerAdapter(底部圆点)
- [API翻译]PagerAdapter - android SDK
- Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现
- android FragmentPagerAdapter 无法刷新数据的解决方法
- 54 Android Fragment _ ViewPager设置FragmentPagerAdapter
- Android中ViewPager使用FragmentPagerAdapter(底部圆点)
- Android 开发笔记 第三季 FragmentPagerAdapter
- Android FragmentPagerAdapter和FragmentStatePagerAdapter的区别
- Android修炼之道—FragmentStatePagerAdapter和FragmentPagerAdapter
- Android中最常用的适配器:PagerAdapter与FragmentPagerAdapter
- Android实战简易教程<三十四>(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)
- Android——FragmentPagerAdapter和FragmentStatePagerAdapter的使用...