ViewPager的用法实例
前言:最近在做一个项目,文件管理器,能够在主界面通过滑动选择:手机,内存卡,云端的不同界面,因此就用到了ViewPager。
起步阶段,ViewPager写好了,对应的Adapter也写好了,测试通过,在ViewPager中的子项都是用ListView来布局,发现ListView中的数据单独测试能够显示,一旦和ViewPager合并在一起ListView就显示不出来,后来和一些实例源码作比较,才知道是在ViewPager的适配器的instantiateItem()中,返回的时候返回错了,本来应该返回适配的控件view的,竟然返回了ViewGroup了。。。
其中每个View不是使用ListView来做的,仅仅是放了一个图片(因为是测试ViewPager的问题),最终的效果如下图

下面是单独的ViewPager的源码,
1.清单文件 activity_main.xml内容如下:
<?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" > <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" > <android.support.v4.view.PagerTabStrip
android:id="@+id/pagerTabStrip"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager> </LinearLayout>
2.子view对应的vp_phone.xml代码如下
<?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="wrap_content"
android:orientation="vertical" > <ImageView
android:id="@+id/image_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher"
android:scaleType="fitXY"
/> </LinearLayout>
3.主类代码MainActivity.java如下:
package com.zyf.android.filemanage; import java.io.File;
import java.util.ArrayList; import com.zyf.android.adapter.MyPagerAdapter;
import com.zyf.androidfilemanage.R; import android.app.Activity;
import android.os.Bundle; import android.support.v4.view.ViewPager;
import android.view.View; public class MainActivity extends Activity { private ArrayList<View> views; private ArrayList<File> files;
public static int LIST_GRID_MODE =0;
public static int LIST_MODE =0;
public static int GRID_MODE =1; //private ArrayList<> @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
views = new ArrayList<View>();
View view0 =getLayoutInflater().inflate(R.layout.vp_phone, null);
View view1 =getLayoutInflater().inflate(R.layout.vp_phone, null);
View view2 =getLayoutInflater().inflate(R.layout.vp_phone, null);
views.add(view0);
views.add(view1);
views.add(view2);
viewPager.setAdapter(new MyPagerAdapter(views));
}
}
4.ViewPager的适配器MyPagerAdapter.java代码如下:
package com.zyf.android.adapter; import java.util.ArrayList; import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup; public class MyPagerAdapter extends PagerAdapter { private ArrayList<View> views;
private String[] pagerTabStrip={"手机","存储卡","云端"}; public MyPagerAdapter(ArrayList<View> views) {
// TODO Auto-generated constructor stub
this.views =views;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return views.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
//super.destroyItem(container, position, object);
container.removeView(views.get(position));
} @Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return pagerTabStrip[position];
} @Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View view = views.get(position); container.addView(view);
return view; //出错的地方就是这里,原来返回了container导致错误,运行的时候看不出来
}
}
上面的代码比较简单,作出的效果也很简单,不过在这个基础上把子View的ImageView换成其他的,比如ListView的话,显示效果会更好些
ViewPager的用法实例的更多相关文章
- php中的curl使用入门教程和常见用法实例
摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...
- 上传文件及$_FILES的用法实例
Session变量($_SESSION):�php的SESSION函数产生的数据,都以超全局变量的方式,存放在$_SESSION变量中.1.Session简介SESSION也称为会话期,其是存储在服务 ...
- C++语言中cin cin.getline cin.get getline gets getchar 的用法实例
#include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...
- Union all的用法实例sql
---Union all的用法实例sqlSELECT TOP (100) PERCENT ID, bid_user_id, UserName, amount, createtime, borrowTy ...
- 【转】javascript入门系列演示·三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- php strpos 用法实例教程
定义和用法该strpos ( )函数返回的立场,首次出现了一系列内部其他字串. 如果字符串是没有发现,此功能返回FALSE . 语法 strpos(string,find,start) Paramet ...
- 【JSP】三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- python多线程threading.Lock锁用法实例
本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...
随机推荐
- python下redis的基本操作:
1. 基本操作: >>> import redis >>> print redis.__file__ /usr/local/lib/python2.7/dist-p ...
- 转:Nginx 日志文件切割
http://www.cnblogs.com/benio/archive/2010/10/13/1849935.html 偶然发现access.log有21G大,所以将其切割. Nginx 是一个非常 ...
- UserMailbox 必须强制使用 Database---Database is mandatory on UserMailbox error
XX搞了接近一天,终于搞定. 不只是在查看用户邮箱里发现这样的情况,就连在PS里执行GET-MAILBOX之类,都有这个报错. 跟网上所有的解决方法都不一样. 重新了系统邮件都不行,重新了ADMINI ...
- 配置Tomcat JNDI数据源
原文地址:http://my.oschina.net/xiaomaoandhong/blog/74584 先记录在此,按照博文未配置成功
- 【Xamarin挖墙脚系列:学习资料大放送】
原文:[Xamarin挖墙脚系列:学习资料大放送] 最靠谱的还是官方的文档,英文的,借着翻译工具,硬看吧.还能学习英文........... https://developer.xamarin.com ...
- vs2010自带的报表
本例用来显示Northwind中的order details表中的数据交分组 1.建立一WinForm程序,并建立一数据库连接,选择order details表,此时会自动建立一个xsd的数据集类,如 ...
- django 常用命令
django 常用命令,备忘: django-admin.py startproject test 创建一个项目名叫test的项目 python manage.py startapp app 创建一个 ...
- C#后台执行bat
C#后台执行bat ProcessStartInfo p = new ProcessStartInfo(); p.FileName = "C:\\1.bat"; p.WindowS ...
- 算法 python实现(一) 基本常识
我算法和数据结构都不好,笨的一比. 现在的目标是熟悉常见和经典算法,看本站两个大牛的博客,在这也推荐一下,特别好,除了算法其他的技术也很不错. Vamei : http://www.cnblogs.c ...
- ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令
交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径.该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指 ...