使用ViewPager需要引入android.support.v4.View.ViewPager這樣的jar包,谷歌公司為解決當前版本碎片化的問題,提供的兼容的包。主要目的就是解決向下兼容問題。
1,加載顯示的頁卡
將layout布局轉換成view對象
(1)LayoutInflater if= getLayoutInflater().from(this);
if.inflater(resource,root);
(2) View.inflate(context,resource,root);
上面第一種方法在之前練習Fragment的時候用過,
2,配置adapter
(1)PagerAdapter 數據源:List<View>
(2)FragmentPagerAdapter 數據源 List<Fragment>
(3)FragmentStatPagerAdapter 數據源 List<Fragmnet>
ViewPager和之前學習到的List等控件一樣是一個集合,都需要設置數據源,
第一步,先創建3個view布局文件,定義ViewPager控件
view1.xml,
view2.xml,
view3.xml
<android.support.v4.view.ViewPager android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/viewPager" android:layout_gravity="center"> </android.support.v4.view.ViewPager>
第二部,初始化view集合
private List<View> viewList; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewList = new ArrayList<View>(); initView(); } private void initView() { /* 通過view對象作為viewpager的數據源 */ viewList.add(View.inflate(getBaseContext(),R.layout.view1,null)); viewList.add(View.inflate(getBaseContext(), R.layout.view2, null)); viewList.add(View.inflate(getBaseContext(),R.layout.view3,null)); }
第三部,自定義Pager適配器
public class MyPagerAdapter extends PagerAdapter { private List<View> viewList;public MyPagerAdapter(List<View> viewList){ this.viewList = viewList; } //返回的是頁卡的數量 @Override public int getCount() { return viewList.size(); } //判斷當前view對象是否來自於對象 @Override public boolean isViewFromObject(View view, Object o) { return view == o; } //實例化一個頁卡 @Override public Object instantiateItem(ViewGroup container, int position) { //return super.instantiateItem(container, position); container.addView(viewList.get(position)); return viewList.get(position); } //銷毀一個頁卡 @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object); container.removeView(viewList.get(position)); } }
第四部,為viewPager設置數據源
myPagerAdapter = new MyPagerAdapter(viewList,titlePager); viewPager = (ViewPager)findViewById(R.id.viewPager); viewPager.setAdapter(myPagerAdapter);
上面四步已經可以顯示出viewPager的樣子了。PagerAdapter類管理view對象,每次實例化前后三個view,當頁面切換的時候,會銷毀掉多余的view,創建新的view。
第五步,為viewPager創建標題欄
這一步需要在ViewPager的布局文件中加入android.support.v4.view.PagerTabStrip
<android.support.v4.view.ViewPager android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/viewPager" android:layout_gravity="center"> <android.support.v4.view.PagerTabStrip android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/titlePager"> </android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager>
並且需要初始化標題集合,在適配器中定義標題列表,同時PagerAdapter需要實現下面的方法。
//設置viewpager的標題 @Override public CharSequence getPageTitle(int position) { //return super.getPageTitle(position); return titlePager.get(position);
以上一個帶標題欄的viewPager就有了,這時我們可以設置一些Title的屬性使得標題看起來更加美觀一些
pagerTabStrip.setBackgroundColor(Color.YELLOW); pagerTabStrip.setTextColor(Color.RED); pagerTabStrip.setDrawFullUnderline(false); pagerTabStrip.setTabIndicatorColor(Color.GREEN);
最后一點需要注意的是,可以為ViewPager添加監聽事件OnPageChangeListener。