android學習ViewPager的簡單使用


  使用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。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM