ViewPager官方文档翻译

来源:互联网 发布:淘宝换货要申请吗 编辑:程序博客网 时间:2024/05/01 15:01

布局管理器允许用户通过左滑和右滑浏览每一页的数据。你应该提供一个PagerAdapter 的实现 可以告知每一页要展示的View。

Note:这个类在之前就已经设计好了。API可能会在之后更新的兼容包中有一点改变。当你要兼容新的的版本时,可能会更改你的应用里的一部分源码。

ViewPager经常和Fragment组合在一起,这样可以更好、便捷的提供和管理每一页的生命周期。下面是一些用带ViewPager的Fragment实现的标准的adapters,可以满足基本的一些需要:分别有FragmentPagerAdapter,FragmentStatePagerAdapterFragmentPagerAdapter, 和 FragmentStatePagerAdapter; 只要向这些类添加一部分代码,就可以展现一个完整的用户界面。

这里是一个比较复杂的关于ViewPager的例子,它和ActionBar很好的结合 。你可以在 API 4+ Support Demos和API 13+ Support Demos的示范代码中找到使用了ViewPager的例子。

public class ActionBarTabsPager extends Activity {    ViewPager mViewPager;    TabsAdapter mTabsAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mViewPager = new ViewPager(this);        mViewPager.setId(R.id.pager);        setContentView(mViewPager);        final ActionBar bar = getActionBar();        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);        mTabsAdapter = new TabsAdapter(this, mViewPager);        mTabsAdapter.addTab(bar.newTab().setText("Simple"),                CountingFragment.class, null);        mTabsAdapter.addTab(bar.newTab().setText("List"),                FragmentPagerSupport.ArrayListFragment.class, null);        mTabsAdapter.addTab(bar.newTab().setText("Cursor"),                CursorFragment.class, null);        if (savedInstanceState != null) {            bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));        }    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putInt("tab", getActionBar().getSelectedNavigationIndex());    }    /**     * This is a helper class that implements the management of tabs and all     * details of connecting a ViewPager with associated TabHost.  It relies on a     * trick.  Normally a tab host has a simple API for supplying a View or     * Intent that each tab will show.  This is not sufficient for switching     * between pages.  So instead we make the content part of the tab host     * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy     * view to show as the tab content.  It listens to changes in tabs, and takes     * care of switch to the correct paged in the ViewPager whenever the selected     * tab changes.     */    public static class TabsAdapter extends FragmentPagerAdapter            implements ActionBar.TabListener, ViewPager.OnPageChangeListener {        private final Context mContext;        private final ActionBar mActionBar;        private final ViewPager mViewPager;        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();        static final class TabInfo {            private final Class<?> clss;            private final Bundle args;            TabInfo(Class<?> _class, Bundle _args) {                clss = _class;                args = _args;            }        }        public TabsAdapter(Activity activity, ViewPager pager) {            super(activity.getFragmentManager());            mContext = activity;            mActionBar = activity.getActionBar();            mViewPager = pager;            mViewPager.setAdapter(this);            mViewPager.setOnPageChangeListener(this);        }        public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {            TabInfo info = new TabInfo(clss, args);            tab.setTag(info);            tab.setTabListener(this);            mTabs.add(info);            mActionBar.addTab(tab);            notifyDataSetChanged();        }        @Override        public int getCount() {            return mTabs.size();        }        @Override        public Fragment getItem(int position) {            TabInfo info = mTabs.get(position);            return Fragment.instantiate(mContext, info.clss.getName(), info.args);        }        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {        }        @Override        public void onPageSelected(int position) {            mActionBar.setSelectedNavigationItem(position);        }        @Override        public void onPageScrollStateChanged(int state) {        }        @Override        public void onTabSelected(Tab tab, FragmentTransaction ft) {            Object tag = tab.getTag();            for (int i=0; i<mTabs.size(); i++) {                if (mTabs.get(i) == tag) {                    mViewPager.setCurrentItem(i);                }            }        }        @Override        public void onTabUnselected(Tab tab, FragmentTransaction ft) {        }        @Override        public void onTabReselected(Tab tab, FragmentTransaction ft) {        }    }}
0 0
原创粉丝点击