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语言每日一题
    C语言刷“矩阵”类题目(2维矩阵/2级指针)
    C语言刷2数/3数/4数之和
    C语言刷数组题记录
    二、IAR创建工程并进行烧写
    三、STM8的学习笔记-----GPIO操作
    51单片机--------如何使用keil软件建立一个工程
    一、搭建mosquitto
    二、解决端口占用被占用情况
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/4545704.html
Copyright © 2011-2022 走看看