zoukankan      html  css  js  c++  java
  • Android ViewPager使用详解(转)

    这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter。看一下api的图片,

     ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:

      1.在住布局文件里加入

    [html] view plaincopy
     
    1. <</span>android.support.v4.view.ViewPager    这个组件,注意这个组件是用来显示左右滑动的界面的,如果不加载xml布局文件,他是不会显示内容的。  
    2.         android:id="@+id/viewpager"  
    3.         android:layout_width="wrap_content"  
    4.         android:layout_height="wrap_content"  
    5.         android:layout_gravity="center" >  

     2.加载要显示的页卡,

    [java] view plaincopy
     
    1. LayoutInflater lf = getLayoutInflater().from(this);  
    2.         view1 = lf.inflate(R.layout.layout1, null);  
    3.         view2 = lf.inflate(R.layout.layout2, null);  
    4.         view3 = lf.inflate(R.layout.layout3, null);  
    5.   
    6.         viewList = new ArrayList();// 将要分页显示的View装入数组中  
    7.         viewList.add(view1);  
    8.         viewList.add(view2);  
    9.         viewList.add(view3);  

     3.在Activity里实例化ViewPager组件,并设置它的Adapter(就是PagerAdapter,方法与ListView一样的),在这里一般需要重写PagerAdapter。

    [java] view plaincopy
     
    1. PagerAdapter pagerAdapter = new PagerAdapter() {  
    2.   
    3.             @Override  
    4.             public boolean isViewFromObject(View arg0, Object arg1) {  
    5.   
    6.                 return arg0 == arg1;  
    7.             }  
    8.   
    9.             @Override  
    10.             public int getCount() {  
    11.   
    12.                 return viewList.size();  
    13.             }  
    14.   
    15.             @Override  
    16.             public void destroyItem(ViewGroup container, int position,  
    17.                     Object object) {  
    18.                 container.removeView(viewList.get(position));  
    19.   
    20.             }  
    21.   
    22.             @Override  
    23.             public int getItemPosition(Object object) {  
    24.   
    25.                 return super.getItemPosition(object);  
    26.             }  
    27.   
    28.             @Override  
    29.             public CharSequence getPageTitle(int position) {  
    30.   
    31.                 return titleList.get(position);  
    32.             }  
    33.   
    34.             @Override  
    35.             public Object instantiateItem(ViewGroup container, int position) {  
    36.                 container.addView(viewList.get(position));  
    37.                 weibo_button=(Button) findViewById(R.id.button1);  
    38.                 weibo_button.setOnClickListener(new OnClickListener() {  
    39.                       
    40.                     public void onClick(View v) {  
    41.                         intent=new Intent(ViewPagerDemo.this,WeiBoActivity.class);  
    42.                         startActivity(intent);  
    43.                     }  
    44.                 });  
    45.                 return viewList.get(position);  
    46.             }  
    47.   
    48.         };  
    49.         viewPager.setAdapter(pagerAdapter);  

      这是重写PagerAdapter的一个方法,我们还可以这样做:

    [java] view plaincopy
     
    1. public class MyViewPagerAdapter extends PagerAdapter{  
    2.         private List mListViews;  
    3.           
    4.         public MyViewPagerAdapter(List mListViews) {  
    5.             this.mListViews = mListViews;//构造方法,参数是我们的页卡,这样比较方便。  
    6.         }  
    7.   
    8.         @Override  
    9.         public void destroyItem(ViewGroup container, int position, Object object)   {     
    10.             container.removeView(mListViews.get(position));//删除页卡  
    11.         }  
    12.   
    13.   
    14.         @Override  
    15.         public Object instantiateItem(ViewGroup container, int position) {  //这个方法用来实例化页卡         
    16.              container.addView(mListViews.get(position), 0);//添加页卡  
    17.              return mListViews.get(position);  
    18.         }  
    19.   
    20.         @Override  
    21.         public int getCount() {           
    22.             return  mListViews.size();//返回页卡的数量  
    23.         }  
    24.           
    25.         @Override  
    26.         public boolean isViewFromObject(View arg0, Object arg1) {             
    27.             return arg0==arg1;//官方提示这样写  
    28.         }  
    29.     }  

      大同小异,有一定很重要,就是我们需要重写哪些方法。从上面的图片可以看到,ViewPager的适配器是PagerAdapter,它是基类提供适配器来填充页面ViewPager内部,你很可能想要使用一个更具体的实现,如FragmentPagerAdapter或FragmentStatePagerAdapter。在这里需要说明一下,其实ViewPager应该和Fragment一起使用,至少谷歌官方是这么想的,但是在3.0之下,我们没有必要这么做。下面要注意,当你实现一个PagerAdapter,你必须至少覆盖以下方法:

      从上面的例子中可以看到,我们最少也是实现了上面四个方法,当然如果你想让程序更健壮或是功能更全面,你可以重写其他的方法。下面看一下第一个完整的示例代码:
      主页面Activity:
    [java] view plaincopy
     
    1. package com.example.viewpagerdemo;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5. import android.os.Bundle;  
    6. import android.app.Activity;  
    7. import android.content.Context;  
    8. import android.content.Intent;  
    9. import android.support.v4.view.PagerAdapter;  
    10. import android.support.v4.view.PagerTabStrip;  
    11. import android.support.v4.view.PagerTitleStrip;  
    12. import android.support.v4.view.ViewPager;  
    13. import android.util.AttributeSet;  
    14. import android.view.LayoutInflater;  
    15. import android.view.Menu;  
    16. import android.view.View;  
    17. import android.view.View.OnClickListener;  
    18. import android.view.ViewGroup;  
    19. import android.widget.Button;  
    20.   
    21. public class ViewPagerDemo extends Activity {  
    22.   
    23.     private View view1, view2, view3;//需要滑动的页卡  
    24.     private ViewPager viewPager;//viewpager  
    25.     private PagerTitleStrip pagerTitleStrip;//viewpager的标题  
    26.     private PagerTabStrip pagerTabStrip;//一个viewpager的指示器,效果就是一个横的粗的下划线  
    27.     private List viewList;//把需要滑动的页卡添加到这个list中  
    28.     private List titleList;//viewpager的标题  
    29.     private Button weibo_button;//button对象,一会用来进入第二个Viewpager的示例  
    30.    private Intent intent;  
    31.     @Override  
    32.     public void onCreate(Bundle savedInstanceState) {  
    33.         super.onCreate(savedInstanceState);  
    34.         setContentView(R.layout.activity_view_pager_demo);  
    35.         initView();  
    36.     }  
    37.         
    38.           
    39.         view1 = findViewById(R.layout.layout1);  
    40.         view2 = findViewById(R.layout.layout2);  
    41.         view3 = findViewById(R.layout.layout3);  
    42.   
    43.         LayoutInflater lf = getLayoutInflater().from(this);  
    44.         view1 = lf.inflate(R.layout.layout1, null);  
    45.         view2 = lf.inflate(R.layout.layout2, null);  
    46.         view3 = lf.inflate(R.layout.layout3, null);  
    47.   
    48.         viewList = new ArrayList();// 将要分页显示的View装入数组中  
    49.         viewList.add(view1);  
    50.         viewList.add(view2);  
    51.         viewList.add(view3);  
    52.   
    53.         titleList = new ArrayList();// 每个页面的Title数据  
    54.         titleList.add("wp");  
    55.         titleList.add("jy");  
    56.         titleList.add("jh");  
    57.   
    58.         PagerAdapter pagerAdapter = new PagerAdapter() {  
    59.   
    60.             @Override  
    61.             public boolean isViewFromObject(View arg0, Object arg1) {  
    62.   
    63.                 return arg0 == arg1;  
    64.             }  
    65.   
    66.             @Override  
    67.             public int getCount() {  
    68.   
    69.                 return viewList.size();  
    70.             }  
    71.   
    72.             @Override  
    73.             public void destroyItem(ViewGroup container, int position,  
    74.                     Object object) {  
    75.                 container.removeView(viewList.get(position));  
    76.   
    77.             }  
    78.   
    79.             @Override  
    80.             public int getItemPosition(Object object) {  
    81.   
    82.                 return super.getItemPosition(object);  
    83.             }  
    84.   
    85.             @Override  
    86.             public CharSequence getPageTitle(int position) {  
    87.   
    88.                 return titleList.get(position);//直接用适配器来完成标题的显示,所以从上面可以看到,我们没有使用PagerTitleStrip。当然你可以使用。  
    89.   
    90.             }  
    91.   
    92.             @Override  
    93.             public Object instantiateItem(ViewGroup container, int position) {  
    94.                 container.addView(viewList.get(position));  
    95.                 weibo_button=(Button) findViewById(R.id.button1);//这个需要注意,我们是在重写adapter里面实例化button组件的,如果你在onCreate()方法里这样做会报错的。  
    96.                 weibo_button.setOnClickListener(new OnClickListener() {  
    97.                       
    98.                     public void onClick(View v) {  
    99.                         intent=new Intent(ViewPagerDemo.this,WeiBoActivity.class);  
    100.                         startActivity(intent);  
    101.                     }  
    102.                 });  
    103.                 return viewList.get(position);  
    104.             }  
    105.   
    106.         };  
    107.         viewPager.setAdapter(pagerAdapter);  
    108.     }  
    109.   
    110.     @Override  
    111.     public boolean onCreateOptionsMenu(Menu menu) {  
    112.         getMenuInflater().inflate(R.menu.activity_view_pager_demo, menu);  
    113.         return true;  
    114.     }  
    115.   
    116. }  
      它的布局文件:
     
    [java] view plaincopy
     
     

    转自:http://blog.sina.com.cn/s/blog_6933d7330101ae9g.html

  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/4545704.html
Copyright © 2011-2022 走看看