1. 程式人生 > >Android ViewPager組件

Android ViewPager組件

ges apt create ren manage n) pix ble turn

一、以代碼的方式定義並產生布局

  在界面構建過程中,會大量的使用XML文件,定義視圖布局。下面嘗試使用以代碼的方式定義視圖層級結構。使用代碼方式定義視圖,其實就是調用視圖的構造方法。但是,在一些構建塊中,依然要使用資源ID,ViewPager就是這樣的一種構建塊。而FragmentManager要求任何作Fragment容器的視圖都必須具有資源ID。Viewpager是一個Fragment容器。

  以代碼方式創建視圖,應完成以下任務項:

  • 為ViewPager創建資源ID。
  • 創建ViewPager實例並賦值給ViewPager。
  • 賦值資源ID給ViewPager,並對其進行配置。
  • 設備ViewPager為Activity的內容視圖。

1. 獨立的資源ID

  在res/values目錄下創建名為ids.xml文件,用於存儲資源ID。(ids.xml)

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <item type="id" name="viewPager" />
4 </resources>

2. 以代碼方式創建內容視圖(CrimeViewPager.java)

1 // 實例化ViewPager
2 mViewPager = new
ViewPager(this); 3 // 為ViewPager實例配置資源ID 4 mViewPager.setId(R.id.viewPager); 5 // 設置為Activity的容器 6 setContentView(mViewPager);

3. ViewPager與PagerAdapter (視圖顯示數據的數據源)

 1 public class CrimePagerActivity extends SingleFragmentActivity
 2 {
 3     private ViewPager mViewPager;
 4     private ArrayList<Crime> mCrimes;
5 6 public CrimePagerActivity() 7 { 8 } 9 10 @Override 11 public Fragment createFragment() 12 { 13 return null; 14 } 15 16 @Override 17 public void onCreate(Bundle savedInstanceState) 18 { 19 super.onCreate(savedInstanceState); 20 21 // 實例化ViewPager 22 mViewPager = new ViewPager(this); 23 // 為ViewPager實例配置資源ID 24 mViewPager.setId(R.id.viewPager); 25 // 設置為Activity的容器 26 setContentView(mViewPager); 27 28 mCrimes = CrimeLab.get(this).getCrimes(); 29 30 // fragment manager 31 FragmentManager fm = getSupportFragmentManager(); 32 mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) 33 { 34 // 獲取當前視圖的Fragment對象 35 @Override 36 public Fragment getItem(int position) 37 { 38 Crime crime = mCrimes.get(position); 39 return CrimeFragment.newInstance(crime.getmId()); 40 } 41 42 // 獲取數據條數,計算顯示視圖個數 43 @Override 44 public int getCount() 45 { 46 return mCrimes.size(); 47 } 48 }); 49 50 // 設置從列表進入詳細界面的具體數據 51 for (int idx = 0; idx < mCrimes.size(); idx++) 52 { 53 UUID code = (UUID) getIntent().getSerializableExtra(CrimeFragment.sExtra_Crime_ID); 54 if (mCrimes.get(idx).getmId().equals(code)) 55 { 56 // 設置界面當前顯示的View 57 mViewPager.setCurrentItem(idx); 58 break; 59 } 60 } 61 } 62 }

PS:可以通過方法設置當前頁面預加載相鄰頁面數目:

1 // 定制預加載相鄰頁面的數目
2 mViewPager.setOffscreenPageLimit(3);

4. 通過方法監聽界面間的切換

 1 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
 2         {
 3             @Override
 4             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
 5             {
 6 
 7             }
 8 
 9             @Override
10             public void onPageSelected(int position)
11             {
12                 Crime crime = mCrimes.get(position);
13                 if (null != crime.getmTitle())
14                 {
15                     setTitle(crime.getmTitle());
16                 }
17             }
18 
19             @Override
20             public void onPageScrollStateChanged(int state)
21             {
22 
23             }
24         });

Android ViewPager組件