博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一起学Android之ViewPager
阅读量:7239 次
发布时间:2019-06-29

本文共 5903 字,大约阅读时间需要 19 分钟。

本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用。

概述

ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)PageAdapter来进行数据和页面的传递。ViewPager更多时候会和Fragment一起使用,方便管理各个页面的生命周期。

涉及知识点

  • ViewPager并非是原生的UI控件,所以使用的时候需要包含全部的包名(android.support.v4.view.ViewPager)。
  • PagerAdapter 是一个抽象基类,开发时需要实现类中的抽象方法。用于将数据在ViewPager中展示出来。 PagerAdapter的抽象方法需要实现以下几个:
    • getCount() 用于获取需要展示的子视图的数量
    • isViewFromObject(View view, Object object) 子视图是否需要重新加载,如果已经加载过,则不需要重新加载。
    • destroyItem(ViewGroup container, int position, Object object) 删除子视图
    • instantiateItem(ViewGroup container, int position) 生成对应位置的子视图
  • addOnPageChangeListener 对ViewPager增加监听事件
  • SimpleOnPageChangeListener 是实现OnPageChangeListener接口的类,需要实现onPageSelected(int position)方法即可。
  • ImageView 图片视图,用于显示图片,本例中主要用于ViewPager中的指示器。
  • FragmentPagerAdapter 用于显示Fragment的适配器。
  • FragmentManager 一个用于管理Fragmetn的抽象类,是FragmentPagerAdapter构造函数中的一个参数。

示例截图

图片轮播如下所示:

示例源码

xml布局代码

1 
2
8
13
14
23
31 32 33
39
View Code

Java代码(图片轮播)

1 package com.hex.demoviewpager;  2   3 import android.content.Intent;  4 import android.support.v4.view.PagerAdapter;  5 import android.support.v4.view.ViewPager;  6 import android.support.v7.app.ActionBar;  7 import android.support.v7.app.AppCompatActivity;  8 import android.os.Bundle;  9 import android.util.Log; 10 import android.view.View; 11 import android.view.ViewGroup; 12 import android.widget.Button; 13 import android.widget.ImageView; 14 import android.widget.LinearLayout; 15 import android.widget.TextView; 16  17 public class MainActivity extends AppCompatActivity { 18  19     private ViewPager mViewPager; 20     int[] imgs; 21     String[] titles; 22     TextView tvTitle; 23     LinearLayout llIndicator; 24     Button mGo; 25     @Override 26     protected void onCreate(Bundle savedInstanceState) { 27         super.onCreate(savedInstanceState); 28         setContentView(R.layout.activity_main); 29         mViewPager= (ViewPager) this.findViewById(R.id.vp_info); 30         imgs=new int[]{R.drawable.s01,R.drawable.s02,R.drawable.s03,R.drawable.s04,R.drawable.s05}; 31         titles=new String[]{"第一张图","第二张图","第三张图","第四张图","第五张图"}; 32         tvTitle= (TextView) this.findViewById(R.id.tv_title); 33         //构造适配器并赋值 34         MyAdapter adapter=new MyAdapter(); 35         mViewPager.setAdapter(adapter); 36         //初始化第一个标题 37         tvTitle.setText(titles[0]); 38         //初始化指示器 39         llIndicator = (LinearLayout) this.findViewById(R.id.ll_Indicator); 40         setIndicator(0); 41         //设置页面切换监听事件 42         mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 43             /** 44              * 页面被选中 45              * @param position 46              */ 47             @Override 48             public void onPageSelected(int position) { 49                 Log.v("DemoViewPager","当前是:"+titles[position]); 50                 tvTitle.setText(titles[position]); 51                 //设置指示器 52                 llIndicator.removeAllViews(); 53                 setIndicator(position); 54             } 55         }); 56         //页面跳转 57         mGo= (Button) this.findViewById(R.id.bn_go); 58         mGo.setOnClickListener(new View.OnClickListener() { 59             @Override 60             public void onClick(View v) { 61                 Intent intent=new Intent(MainActivity.this,Main2Activity.class); 62                 startActivity(intent); 63             } 64         }); 65     } 66  67     /** 68      * 设置指示器 69      * @param position 70      */ 71     private  void setIndicator(int position){ 72         for(int i=0;i
View Code

Java代码(Fragment滑动)

1 package com.hex.demoviewpager; 2  3 import android.support.v4.app.Fragment; 4 import android.support.v4.app.FragmentActivity; 5 import android.support.v4.app.FragmentManager; 6 import android.support.v4.app.FragmentPagerAdapter; 7 import android.support.v4.view.ViewPager; 8 import android.support.v7.app.AppCompatActivity; 9 import android.os.Bundle;10 import android.util.Log;11 import android.widget.ImageView;12 import android.widget.LinearLayout;13 14 import java.util.ArrayList;15 import java.util.List;16 17 public class Main2Activity extends FragmentActivity {18 19     private ViewPager mViewPager2;20     private   List
mList;21 LinearLayout llIndicator2;22 @Override23 protected void onCreate(Bundle savedInstanceState) {24 super.onCreate(savedInstanceState);25 setContentView(R.layout.activity_main2);26 mViewPager2= (ViewPager) this.findViewById(R.id.vp_info2);27 mList=new ArrayList
();28 for(int i=0;i<5;i++){29 ContentFragment fragment=ContentFragment.newInstance("第 "+i+" 个Fragment");30 mList.add(fragment);31 }32 FragmentManager manager = getSupportFragmentManager();33 MyAdapter2 adapter2=new MyAdapter2(manager);34 mViewPager2.setAdapter(adapter2);35 //初始化指示器36 llIndicator2 = (LinearLayout) this.findViewById(R.id.ll_Indicator2);37 setIndicator(0);38 //设置页面切换监听事件39 mViewPager2.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {40 /**41 * 页面被选中42 * @param position43 */44 @Override45 public void onPageSelected(int position) {46 //设置指示器47 llIndicator2.removeAllViews();48 setIndicator(position);49 }50 });51 }52 53 /**54 * 设置指示器55 * @param position56 */57 private void setIndicator(int position){58 for(int i=0;i
View Code

备注

ViewPager支持的Fragment也是android.support.v4.app包中的Fragment,需要调用的Activity也是需要继承android.support.v4.app.FragmentActivity 。ViewPager中的图片指示器是用LinearLayout中图片实现的。

转载于:https://www.cnblogs.com/hsiang/p/10328332.html

你可能感兴趣的文章
群集架构篇
查看>>
选择固态硬盘有哪些注意的事项
查看>>
数澜天湛分享:地产大数据下一站——数据中台
查看>>
物联网在车联网中的应用
查看>>
移动互联网时代考勤管理的新模式
查看>>
【响应式】基本概念&设计技巧&开发流程&经验技巧&实例参考
查看>>
objective-c设计模式之---工厂方法和抽象工厂
查看>>
什么是数据湖?有什么用?终于有人讲明白了……
查看>>
易天光通信10G SFP+光模块系列分类
查看>>
U盘格式化后数据恢复,格式化后能恢复吗
查看>>
pop3协议capa指令总结
查看>>
有序线性表的有序合并
查看>>
Windows2003无法连接远程桌面问题 解决方法!
查看>>
为wordpress后台登陆添加算术验证码
查看>>
web的安全性(转贴)
查看>>
[JavaScript]
查看>>
一个Linux程序的执行过程的详解
查看>>
思科路由器配置文件备份和IOS 的备份
查看>>
如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
查看>>
32位支持大容量内存详解
查看>>