zoukankan      html  css  js  c++  java
  • Android ViewPager组件

    一、以代码的方式定义并产生布局

      在界面构建过程中,会大量的使用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         });
  • 相关阅读:
    Leetcode 109
    Leetcode 118
    js时间操作
    DWR搭建以及使用教程
    Ant 概念
    Eclipse 快捷键
    [eclipse] 三个操作技巧
    js call方法
    js验证密码强弱
    request getParameter getAttribute
  • 原文地址:https://www.cnblogs.com/naray/p/5351302.html
Copyright © 2011-2022 走看看