public abstract class FragmentStatePagerAdapter
extends PagerAdapter
java.lang.Object | ||
↳ | android.support.v4.view.PagerAdapter | |
↳ | android.support.v4.app.FragmentStatePagerAdapter |
执行PagerAdapter
,使用Fragment
来管理每个页面。 该类还处理片段状态的保存和恢复。
当有大量页面时,此版本的寻呼机更有用,工作更像列表视图。 当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态。 这使得寻呼机可以保持与每个访问页面相关的少得多的存储器,与FragmentPagerAdapter
相比,在页面之间切换时可能会产生更多开销。
当使用FragmentPagerAdapter时,主机ViewPager必须有一个有效的ID集。
子类只需要实现 getItem(int)
和 getCount()
以具有工作适配器。
以下是包含列表片段的寻呼机的示例实现:
public class FragmentStatePagerSupport extends Activity { static final int NUM_ITEMS = 10; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); // Watch for button clicks. Button button = (Button)findViewById(R.id.goto_first); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { mPager.setCurrentItem(0); } }); button = (Button)findViewById(R.id.goto_last); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { mPager.setCurrentItem(NUM_ITEMS-1); } }); } public static class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return NUM_ITEMS; } @Override public Fragment getItem(int position) { return ArrayListFragment.newInstance(position); } } public static class ArrayListFragment extends ListFragment { int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument. */ static ArrayListFragment newInstance(int num) { ArrayListFragment f = new ArrayListFragment(); // Supply num input as an argument. Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments. */ @Override public void 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 public View 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 public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); } @Override public void onListItemClick(ListView l, View v, int position, long id) { Log.i("FragmentList", "Item clicked: " + id); } } }
顶级片段的 R.layout.fragment_pager
资源是:
<LinearLayout xmlns: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> <LinearLayout android:orientation="horizontal" android:gravity="center" android:measureWithLargestChild="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"> <Button android:id="@+id/goto_first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/first"> </Button> <Button android:id="@+id/goto_last" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/last"> </Button> </LinearLayout> </LinearLayout>
包含每个单独片段布局的 R.layout.fragment_pager_list
资源是:
<LinearLayout xmlns: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"> <TextView android: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 --> <ListView android: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 --> <TextView android: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>
Inherited constants |
---|
From class android.support.v4.view.PagerAdapter
|
Public constructors |
|
---|---|
FragmentStatePagerAdapter(FragmentManager fm) |
Public methods |
|
---|---|
void |
destroyItem(ViewGroup container, int position, Object object) 删除给定位置的页面。 |
void |
finishUpdate(ViewGroup container) 在所示页面中的更改完成时调用。 |
abstract Fragment |
getItem(int position) 返回与指定位置关联的碎片。 |
Object |
instantiateItem(ViewGroup container, int position) 创建给定位置的页面。 |
boolean |
isViewFromObject(View view, Object object) 确定页面视图是否与 |
void |
restoreState(Parcelable state, ClassLoader loader) 还原与此适配器及其先前由 |
Parcelable |
saveState() 如果需要重建当前UI状态,请保存与此适配器及其应恢复的页面关联的任何实例状态。 |
void |
setPrimaryItem(ViewGroup container, int position, Object object) 被调用以通知适配器当前哪个项目被认为是“主要”,这是向用户显示的当前页面。 |
void |
startUpdate(ViewGroup container) 当所显示页面的变化即将开始时调用。 |
Inherited methods |
|
---|---|
From class android.support.v4.view.PagerAdapter
|
|
From class java.lang.Object
|
FragmentStatePagerAdapter (FragmentManager fm)
Parameters | |
---|---|
fm |
FragmentManager
|
void destroyItem (ViewGroup container, int position, Object object)
删除给定位置的页面。 适配器负责从容器中移除视图,尽管它只能确保在从finishUpdate(ViewGroup)
返回时完成finishUpdate(ViewGroup)
。
Parameters | |
---|---|
container |
ViewGroup : The containing View from which the page will be removed. |
position |
int : The page position to be removed. |
object |
Object : The same object that was returned by instantiateItem(View, int) . |
void finishUpdate (ViewGroup container)
在所示页面中的更改完成时调用。 此时,您必须确保所有页面实际上已根据需要添加或从容器中移除。
Parameters | |
---|---|
container |
ViewGroup : The containing View which is displaying this adapter's page views. |
Object instantiateItem (ViewGroup container, int position)
创建给定位置的页面。 适配器负责将视图添加到此处给出的容器,但它只能确保在从finishUpdate(ViewGroup)
返回时完成此操作。
Parameters | |
---|---|
container |
ViewGroup : The containing View in which the page will be shown. |
position |
int : The page position to be instantiated. |
Returns | |
---|---|
Object |
Returns an Object representing the new page. This does not need to be a View, but can be some other container of the page. |
boolean isViewFromObject (View view, Object object)
确定页面视图是否与instantiateItem(ViewGroup, int)
返回的特定键对象相关联。 这个方法对于PagerAdapter正常运行是必需的。
Parameters | |
---|---|
view |
View : Page View to check for association with object |
object |
Object : Object to check for association with view |
Returns | |
---|---|
boolean |
true if view is associated with the key object object |
void restoreState (Parcelable state, ClassLoader loader)
还原与此适配器及其先前由 saveState()
保存的页面关联的任何实例状态。
Parameters | |
---|---|
state |
Parcelable : State previously saved by a call to saveState() |
loader |
ClassLoader : A ClassLoader that should be used to instantiate any restored objects |
Parcelable saveState ()
如果需要重建当前UI状态,请保存与此适配器及其应恢复的页面关联的任何实例状态。
Returns | |
---|---|
Parcelable |
Saved state for this adapter |
void setPrimaryItem (ViewGroup container, int position, Object object)
被调用以通知适配器当前哪个项目被认为是“主要”,这是向用户显示的当前页面。
Parameters | |
---|---|
container |
ViewGroup : The containing View from which the page will be removed. |
position |
int : The page position that is now the primary. |
object |
Object : The same object that was returned by instantiateItem(View, int) . |
void startUpdate (ViewGroup container)
当所显示页面的变化即将开始时调用。
Parameters | |
---|---|
container |
ViewGroup : The containing View which is displaying this adapter's page views. |