只有步驟,備用
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);
}