Android--多頁面管理控件之ViewPager

ViewPager相當於容器,盛裝View或者Fragment,可以使視圖左右滑動。

一、在layout XML文件中如何加入ViewPager

<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:....>
</android.support.v4.view.ViewPager>

二、在ViewPager中加載要顯示的頁卡

1.將layout佈局轉爲View對象(兩種方法)

(1)LayoutInflater If=getLayoutInflater().from(this);

If.inflate(resource,root);

(2)View.inflate(context,resource,root);

2.相關的適配器Adapter(兩類——View、Fragment(業務邏輯複雜時推薦使用Fragment))  新建類繼承於下列某個Adapter,如MyPagerAdapter,然後重寫相關的方法

(1)PagerAdapter  數據源:List<View>   //三個三個頁面的加載

(2)FragmentPagerAdapter 數據源:List<Fragment> //所有頁面一次都加載進來

(3)FragmentStatePagerAdapter 數據源:List<Fragment> //三個三個頁面的加載,需重寫instantiateItem、destroyItem方法,但函數內容不需改寫

Adapter裏面的常用方法:

(1)getCount()需要返回所有頁卡的數量

(2)isViewFromObject(View arg0,Object arg1)  判斷視圖是否由對象產生 官方做法是 return arg0==arg1;

(3)instantiateItem(ViewGroup container,int position) 實例化一個頁卡

(4)destroyItem(ViewGroup container,int position,Object object) 銷燬一個頁卡

(5)getPageTitle(int position) 返回頁面標題信息

示例:

public class MyPageAdapter extends PagerAdapter{

	private List<View>viewList;
	public MyPageAdapter(List<View>viewList) {
		this.viewList=viewList;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return viewList.size();
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		// TODO Auto-generated method stub
		return arg0==arg1;
	}
	//實例化一個頁卡,用來顯示
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(viewList.get(position));
		return viewList.get(position);
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(viewList.get(position));
	}
}

三、像微信一樣給每個頁卡添加一個標籤 與ViewPager控件在同一個佈局文件中

1.在ViewPager內添加一個PagerTabStrip(下面有線)或者PagerTitleStrip(下面沒有線),並存時,前者會失效

 <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        >
        
        <android.support.v4.view.PagerTabStrip
        android:id="@+id/tab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        >
   <span style="white-space:pre">		</span></android.support.v4.view.PagerTabStrip> //注意:在ViewPager標籤內
        
    </android.support.v4.view.ViewPager>

2.聲明一個PagerTabStrip 對象如tab

3.聲明一個List<String> 變量  如 new ArrayList<String>, 向其添加頁卡的標題內容

4.在MyPagerAdapter的構造函數中添加一個參數List<String> titleList 來傳入標題

5.可以通過tab變量修改PagerTabStrip的屬性

  (1)tab.setBackgroundColor(Color.YELLOW);

  (2)tab.setTextColor(Color.RED);

  (3)tab.setDrawFullUnderline(false); //將下面的長線取消掉,即不顯示

  (4)tab.setTabIndicatorColor(Color.BLUE);  //設置下面的小粗線

實例

viewList=new ArrayList<View>();
titleList=new ArrayList<String>();
View view1 = View.inflate(this, R.layout.view1, null);
View view2 = View.inflate(this, R.layout.view2, null);
View view3 = View.inflate(this, R.layout.view3, null);
View view4 = View.inflate(this, R.layout.view4, null);
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
		
titleList.add("第一個頁面");
titleList.add("第二個頁面");
titleList.add("第三個頁面");
titleList.add("第四個頁面");
		
pager=(ViewPager) findViewById(R.id.pager);
tab=(PagerTabStrip) findViewById(R.id.tab);
MyPageAdapter adapter=new MyPageAdapter(viewList,titleList);
pager.setAdapter(adapter);


四、FragmentPagerAdapter的使用

1.新建3個Fragment派生類,重寫onCreateView()方法。

2.初始化List<Fragment>  fragLis=new ArrayList<Fragment>();

3.將1中的三個派生類對象添加進fragList中,如 fragListl.add(new Fragment1());

4.配置Fragment的數據適配器,新建一個FragmentPagerAdapter派生類(成員數據List<Fragment>fragList; List<String> titleList),重寫父類的方法

(1)構造函數,參數中增加fragList和titleList;

(2)Fragment getItem(int arg0);

(3)public int getCount() 

(4)public CharSequence getPageTitle(int position) {return titleList.get(position);}

5.爲了支持support.v4下的FragmentPagerAdapter,MainActivity需繼承於FragmentActivity,

MyFragmentPagerAdapter adapter=new MyFragmentPagerAdapter(getSupportFragmentManager,fragList, titleList);

6.pager.setAdapter(adapter);

五、監聽器的使用

接口:OnPageChangeListener 監聽切換頁卡是切換到多少頁,從0開始計數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章