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         });
  • 相关阅读:
    Python使用SMTP模块、email模块发送邮件
    harbor搭建及使用
    ELK搭建-windows
    ELK技术栈之-Logstash详解
    【leetcode】1078. Occurrences After Bigram
    【leetcode】1073. Adding Two Negabinary Numbers
    【leetcode】1071. Greatest Common Divisor of Strings
    【leetcode】449. Serialize and Deserialize BST
    【leetcode】1039. Minimum Score Triangulation of Polygon
    【leetcode】486. Predict the Winner
  • 原文地址:https://www.cnblogs.com/naray/p/5351302.html
Copyright © 2011-2022 走看看