Android——ViewPager及适配器PagerAdapter...
来源:互联网 发布:flash编辑软件 编辑:程序博客网 时间:2024/04/28 22:41
ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。
好比微信的界面:
手指左右滑动可以切换到微信、通讯录、发现和我这四个导航中..
注意以下几点:
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
3)ViewPager经常和Fragment一起使用,并且提供了专门的PagerAdapter、FragmentPagerAdapter和
FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
4)在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继
承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。
既然PagerTabstrip继承PagerTitleStrip,当然要比它多一些功能,但是有一点需要注意,在定义XML的layout的时候,这两个类
必须是ViewPager标签的子标签,不然会出错。
我们来简单操练一下:
先用PagerAdapter适配器来适配内容及视图view。
创建4个页面的布局view。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/view1_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第一个页面" /></LinearLayout>
这里我们重复创建4个,内容是第一到第四个页面。
创建PagerAdapter,补全继承过来的方法:
package com.example.viewpagertest;import java.util.List;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;public class MyPagerAdapter extends PagerAdapter{ private List<View>viewlist;//存放布局view private List<String> tablist;//切换的导航名字 public MyPagerAdapter(List<View>viewlist,List<String> tablist){ this.viewlist=viewlist; this.tablist=tablist; }// 返回的是页面的数量(view) @Override public int getCount() { // TODO Auto-generated method stub return viewlist.size(); }// view是否来自对象 @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0==arg1;//官方做法 }// 实例化一个页面 @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(viewlist.get(position)); return viewlist.get(position); }// 销毁一个页面 @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(viewlist.get(position)); }//设置导航 @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return tablist.get(position); }}
activity_main xml(存放的ViewPager):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.viewpagertest.MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > <android.support.v4.view.PagerTabStrip android:id="@+id/pagertab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" > </android.support.v4.view.PagerTabStrip> <android.support.v4.view.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="bottom" > </android.support.v4.view.PagerTitleStrip> </android.support.v4.view.ViewPager></LinearLayout>
PagerTabstrip和PagerTitleStrip这两个选择一种,因为其中一种起作用会使另一种无效,这里为了方便演示所以都写上了。
PagerTabstrip通过点击导航会切换页面,而title的不会出现点击效果。
我们需要将这四个布局文件转成view视图。
Mainactivity:
package com.example.viewpagertest;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.support.v4.view.PagerTabStrip;import android.support.v4.view.ViewPager;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class MainActivity extends Activity { private List<View> viewlist; private ViewPager pager; private PagerTabStrip tab; private List<String> tablist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewlist=new ArrayList<View>(); View view1 = View.inflate(this, R.layout.view1, null); View view2 = View.inflate(this, R.layout.view2, null); View view3 = View.inflate(this, R.layout.view3, null); View view4 = View.inflate(this, R.layout.view4, null); viewlist.add(view1); viewlist.add(view2); viewlist.add(view3); viewlist.add(view4);// 初始化控件 pager=(ViewPager) findViewById(R.id.pager); tab=(PagerTabStrip) findViewById(R.id.pagertab);// PagerTabStrip属性设置 tab.setBackgroundColor(Color.GRAY); tab.setDrawFullUnderline(false); tab.setTabIndicatorColor(Color.GREEN); tab.setTextColor(Color.MAGENTA); tablist =new ArrayList<String>(); tablist.add("第一页"); tablist.add("第二页"); tablist.add("第三页"); tablist.add("第四页");// 创建适配器 MyPagerAdapter adapter=new MyPagerAdapter(viewlist,tablist); pager.setAdapter(adapter); }}
- Android——ViewPager及适配器PagerAdapter...
- Android:ViewPager适配器PagerAdapter的使用
- Android ViewPager适配器 PagerAdapter的使用
- ViewPager 适配器之PagerAdapter
- ViewPager的适配器PagerAdapter
- Android ViewPager的适配器PagerAdapter的一般写法
- ViewPager的PagerAdapter适配器使用
- Android——ViewPager、PagerAdapter、Fragment(State)PagerAdapter的关系与区别
- Android适配器之PagerAdapter
- Android ViewPager PagerAdapter
- 关于viewpager的适配器pageradapter的详解
- ViewPager --> 使用PagerAdapter适配器(数据源)展示界面
- ViewPager——之——PagerAdapter
- Fragment与ViewPager及PagerAdapter
- Android初级知识--ViewPager适配器:PagerAdapter和FragmentPagerAdapter的最基本使用
- Android ViewPager 中使用pagerAdapter
- Android-ViewPager(PagerAdapter 实现)
- PagerAdapter 适配器
- oracle中的lock modes
- 个人信息
- Linux下编写进度条的背景知识及代码实现
- 30岁上下的你,现在混得怎么样?
- 函数是否应该设置为static
- Android——ViewPager及适配器PagerAdapter...
- poj初期 计算几何
- CodeForces - 697F Legen... AC自动机+快速幂
- Codeforces Round #398 (Div. 2)题解
- 常见的进程调度算法
- 1.CRM用户登录
- linux下vi命令修改文件及保存等使用方法整理
- 最大子序列和
- 【webpack】entry 和output的详细介绍