應用開頭的引導界面html
相似於「微信」或者「今日頭條」標籤頁之間的切換android
第一步:在佈局文件中加入ViewPager組件,並在代碼中得到該組件微信
<android.support.v4.view.ViewPager android:id="@+id/bbs_center_viewPager" android:layout_width="match_parent" android:layout_height="match_parent" />
第二步:爲ViewPager添加適配器,ViewPager能夠有三種類型的適配器ide
PagerAdapter:使用較少,因此沒有去了解佈局
FragmentPagerAdapter:適用於Fragment比較少的狀況下,由於這個適配器會將訪問過得Fragment都保存在內存中,當Fragment較多時對內存的消耗就會比較大。post
FragmentStatePagerAdapter:適用於Fragment較多的狀況下。當整個Fragment再也不被訪問,它將被銷燬this
示例代碼:code
public class ExamplePagerAdapter extends FragmentStatePagerAdapter{ List<Fragment> fragments; String[] titles; //fragments裏是ViewPager全部要顯示的Fragment的集合,titles是全部標籤頁的名字的集合 public ExamplePagerAdapter(FragmentManager fm, List<Fragment> fragments, String[] titles) { super(fm); this.fragments = fragments; this.titles = titles; } //此ViewPager一共有多少個標籤頁能夠滑動 @Override public int getCount() { return fragments.size(); } //經過此方法返回對應位置標籤頁用到的fragment @Override public Fragment getItem(int position) { return fragments.get(position); } //經過此方法指定每一個標籤頁的名字 @Override public CharSequence getPageTitle(int position) { return titles[position]; } }
第三步:爲ViewPager綁定適配器,傳入參數htm
ViewPager viewPager = (ViewPager) findViewById(R.id.bbs_center_viewPager); ExamplePagerAdapter pagerAdapter = new ExamplePagerAdapter (getSupportFragmentManager(), posts, titles); viewPager.setAdapter(pagerAdapter );
第四步:爲ViewPager綁定監聽器
<!-- 監聽器的寫法之後補上 -->對象
1.經過ViewPager控制顯示第幾個標籤頁:
@Override public void onBackPressed() { if (mPager.getCurrentItem() == 0) { // If the user is currently looking at the first step, allow the system to handle the // Back button. This calls finish() on this activity and pops the back stack. super.onBackPressed(); } else { // Otherwise, select the previous step. mPager.setCurrentItem(mPager.getCurrentItem() - 1); } }
2.在使用FragmentStatePagerAdapter做爲適配器的狀況下保存Fragment的狀態
當使用FragmentStatePagerAdapter 時,若是Fragment不顯示,那麼Fragment對象會被銷燬(滑事後會保存當前界面,以及下一個界面和上一個界面(若是有),最多保存3個,其餘會被銷燬掉)。但在回調onDestroy()方法以前會回調onSaveInstanceState(Bundle outState)方法來保存Fragment的狀態,下次Fragment顯示時經過onCreate(Bundle savedInstanceState)把存儲的狀態值取出來,