Android ViewPager 應該及技巧
1. android 中的ViewPager 功能類似於iOS中的scrollView,實現最基本的頁面的左右滑動功能。該類存在於Google的相容包裡面,所以在引用時記得在BuilldPath中加入“android-support-v4.jar”
2. 在實現中ViewPager需要綁定一個適配器(Adapter),在適配器中返回頁面view的個數及具體的形式。這個就類似於iOS中tableView的實現,必須實現UITableView代理中的 numberOfCell 跟CellForRow,一個用於返回共有多少資料,另一個用於返回每一條具體的資料。
3. ViewPager 通常與Fragment一起使用。在ViewPager中加入多fragment(頁面) 來實現左右的滑動。
4.看個最簡單的ViewPager的代碼: 假設我們現在已經有三個Fragment ,他們的背影顏色分別為red,green, blue。
1) 我們在xml 檔案中添加一個ViewPager,代碼如下
2)在activtiy .java中使用此ViewPager.現在我們有了ViewPager了,還需要一個Adapter,通常我們繼承FragmentPagerAdapter來自訂我們的Adapter以便重寫返回個數及Item的函數。在Adaoter 中定義一個數組,裡面加入上面的Fragment(如果想動態增加留個增加的介面就ok),代碼如下
public static class TabAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener { private ArrayList frg = new ArrayList(); public TabAdapter(FragmentManager fm) { super(fm); CountingFragment f1 = new CountingFragment(); frg.add(f1); CursorFragment f2 = new CursorFragment(); frg.add(f2); FragmentPagerSupport f3 = new FragmentPagerSupport(); frg.add(f3); notifyDataSetChanged(); } @Override public Fragment getItem(int i) { return frg.get(i); } @Override public int getCount() { return frg.size(); } @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { } @Override public void onPageScrollStateChanged(int i) { } }}為了監聽ViewPager 移動變化的事件,我們實現了ViewPager.OnPageChangeListener ,它的實現三個函數看名字就知道什麼意思了。getCount 返回ViewPager 的Fragment的數量,getItem 返回每個位置的Item。
3) 關聯ViewPgaer跟Adapter
mViewPager = (ViewPager)findViewById(R.id.mViewPager); mTabAdapter = new TabAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mTabAdapter);
getSupportFragmentManager 返回一個Fragment的管理器,是FragmentPagerAdapter的要求參數。
經過上面的步驟我們就實現了一個簡單的可以左右滑動的ViewPager。
一些屬性的介紹
當我們有需要用按鍵去控制ViewPager的左右滑動時,使用屬性
| boolean |
arrowScroll(int direction) 向前翻頁參數傳1,向後翻頁參數傳2 |
讓ViewPager不響應滑動的切換事件,如讓嵌套的子ViewPager不響應滑動切換事件,只是響應點擊切換事件,將滑動事件交給父ViewPager處理。,使用
| boolean |
canScrollHorizontally(int direction)Check if this view can be scrolled horizontally in a certain direction. |
@Override public boolean canScrollHorizontally(int direction) { // TODO Auto-generated method stub return false; }