ViewPager相關筆記

只有步驟,備用

ViewPager-PagerAdapter

佈局控件

在activity的佈局文件中添加控件,控件標記名稱爲:
android.support.v4.view.ViewPager
有兩個子控件:
android.support.v4.view.PagerTitleStrip(會在tab標題的上面,但是不知道怎麼隨着頁面的左右滾動切換,所以暫時不知道如何使用這個控件)
android.support.v4.view.PagerTabStrip(每個tab頁面的標題,會隨着頁面的左右滾動切換)

另外還有各個頁面的佈局文件,和平時的頁面寫法一樣,不說了

獲取控件對象並操作

在activity中使用findViewById()獲取到控件的對象
上面說了因爲不知道PagerTitleStrip如何自動切換,所以暫時不使用這個控件,並且PagerTabStrip也足夠了
獲取到PagerTabStrip的對象,使用其方法可以設置tab標題指示器的樣式
獲取到ViewPager的對象,主要使用其setAdapter()方法

生成各個頁面

使用LayoutInflater對象的inflate()方法,加載各個頁面的佈局文件,獲取到各個頁面View類型的對象
然後把這些獲取到的頁面對象放到一個ArrayList<View>裏面去,等下提供數據給適配器
另外,把每個頁面的tab標題,放到一個ArrayList<String>裏面去,也提供給適配器

適配器

寫一個類繼承PagerAdapter,主要重寫PagerAdapter的以下方法:

//獲取頁面數量
@Override
public int getCount() {
    // TODO Auto-generated method stub

    return myListViews.size();
}

//這個不清楚作用,但也必須重寫,重寫內容如下
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return arg0==arg1;
}

//初始化的作用吧,在這裏添加頁面到頁面容器
//父類還有另一個重載的方法(參數不同),重寫任意一個應該都可以
//myListViews是上面提到的ArrayList<View>,裏面存放View類型的頁面的對象
@Override
public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    container.addView(myListViews.get(position));
    return myListViews.get(position);
}

//銷燬、去掉頁面
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    // TODO Auto-generated method stub
    container.removeView(myListViews.get(position));
}

//在這裏添加標題數據到標題容器
//myListPagerTabs是上面提到的ArrayList<String>,裏面存放的是String類型的頁面標題
@Override
public CharSequence getPageTitle(int position) {
    // TODO Auto-generated method stub
    return myListPagerTabs.get(position);
}

寫好適配器類之後就可以使用ViewPager對象的setAdapter()方法綁定上去了

ViewPager-FragmentPagerAdapter

基本和ViewPager+PagerAdapter一樣,只是需要寫幾個fragment類和對應的頁面的佈局文件,每一個頁面都是一個fragment,這些學習過fragment相關的知識就會了

不一樣的地方:
1、上面的ArrayList<Fragment>,裏面存放的東西也就是你寫的fragment的對象了
2、重寫父類FragmentPagerAdapter的具體方法

//只需要重寫下面三個就行了
@Override
public Fragment getItem(int arg0) {
    // TODO Auto-generated method stub
    return myListViews.get(arg0);
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return myListViews.size();
}

@Override
public CharSequence getPageTitle(int position) {
    // TODO Auto-generated method stub
    return myListTabs.get(position);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章