其实这个不是什么新东西了,在介绍(一)中我们就知道了PullToRefreshListView的用法,这里只要将其放入到ViewPager中就行啦。ViewPager还是和以往一样的定义和使用,在适配器中存视图的时候放入PullToRefreshListView就行。

1.ViewPager的布局文件

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#000000"> <!-- The PullToRefreshListView replaces a standard ListView widget. --> <android.support.v4.view.ViewPager
android:id="@+id/vp_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" /> </LinearLayout>

2.找到ViewPager并设置适配器

private void initViewPager() {
// TODO 自动生成的方法存根
mViewPager = (ViewPager) findViewById(R.id.vp_list);
//得到设置好的view列表
ArrayList<View> viewList = setListViewInVp();
mViewPager.setAdapter(new ListViewPagerAdapter(viewList));
}

适配器:

/**
* @author:Jack Tony
* @tips :viewPager的适配器
* @date :2014-10-14
*/
public class ListViewPagerAdapter extends PagerAdapter {
//设置list数组,传入view
private ArrayList<View> mViewList;
private int pagerNum = ; public ListViewPagerAdapter(ArrayList<View> viewList) {
mViewList = viewList;
} public int getPagerNum() {
return pagerNum;
} @Override
public int getCount() {
return mViewList.size();
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public void destroyItem(View arg0, int position, Object object) {
if (mViewList.get(position) != null) {
((ViewPager) arg0).removeView(mViewList.get(position));
}
} @Override
public Object instantiateItem(View container, int position) {
try {
if (mViewList.get(position).getParent() == null) {
((ViewPager) container).addView(mViewList.get(position), );
} else {
/*
* 很难理解新添加进来的view会自动绑定一个父类,由于一个儿子view不能与两个父类相关,
* 所以得解绑不这样做否则会产生 viewpager java.lang.IllegalStateException:
* The specified child already has a parent. You must call
* removeView() on the child's parent first.
*/
((ViewGroup) mViewList.get(position).getParent())
.removeView(mViewList.get(position));
((ViewPager) container).addView(mViewList.get(position), );
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pagerNum = position;
}
return mViewList.get(position);
} }

3.开始设置要放入viewPager中的listView

布局文件:

layout_listview_in_viewpager.xml

<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ptr:ptrHeaderBackground="@android:color/darker_gray" />

java代码:

private ArrayList<View> setListViewInVp() {
//设置给viewpager中填充的view列表
ArrayList<View> viewList = new ArrayList<View>();
//将string数组放入适配器中
final String[] data = { "", "", "","", "", "", "", "", "", "", "",
"", "", "", "", "", "","", "", "", };
ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, data); //找到listView的布局,生成可以下拉刷新的listView,添加到视图列表中
LayoutInflater inflater = LayoutInflater.from(getApplication());
for (int i = ; i < ; i++) {
PullToRefreshListView plv = (PullToRefreshListView) inflater.inflate(
R.layout.layout_listview_in_viewpager, null);
plv.setAdapter(adapter);
plv.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
// TODO 自动生成的方法存根
new GetDataTask(refreshView).execute();
}
}); viewList.add(plv);
}
return viewList;
}

4.定义异步任务

private static class GetDataTask extends AsyncTask<Void, Void, Void> {

        PullToRefreshBase<?> mRefreshedView;

        public GetDataTask(PullToRefreshBase<?> refreshedView) {
mRefreshedView = refreshedView;
} @Override
protected Void doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep();
} catch (InterruptedException e) {
}
return null;
} @Override
protected void onPostExecute(Void result) {
mRefreshedView.onRefreshComplete();
super.onPostExecute(result);
}
}

MainActivity.java的全部代码

package com.example.ptrlistviewinviewpagertest;

import java.util.ArrayList;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView; import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView; public class MainActivity extends Activity { private ViewPager mViewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
} private void initView() {
// TODO 自动生成的方法存根
initViewPager();
} private void initViewPager() {
// TODO 自动生成的方法存根
mViewPager = (ViewPager) findViewById(R.id.vp_list);
//得到设置好的view列表
ArrayList<View> viewList = setListViewInVp();
mViewPager.setAdapter(new ListViewPagerAdapter(viewList));
} private ArrayList<View> setListViewInVp() {
//设置给viewpager中填充的view列表
ArrayList<View> viewList = new ArrayList<View>();
//将string数组放入适配器中
final String[] data = { "", "", "","", "", "", "", "", "", "", "",
"", "", "", "", "", "","", "", "", };
ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, data); //找到listView的布局,生成可以下拉刷新的listView,添加到视图列表中
LayoutInflater inflater = LayoutInflater.from(getApplication());
for (int i = ; i < ; i++) {
PullToRefreshListView plv = (PullToRefreshListView) inflater.inflate(
R.layout.layout_listview_in_viewpager, null);
plv.setAdapter(adapter);
plv.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
// TODO 自动生成的方法存根
new GetDataTask(refreshView).execute();
}
}); viewList.add(plv);
}
return viewList;
} /**
* @author:Jack Tony
* @tips :viewPager的适配器
* @date :2014-10-14
*/
public class ListViewPagerAdapter extends PagerAdapter {
//设置list数组,传入view
private ArrayList<View> mViewList;
private int pagerNum = ; public ListViewPagerAdapter(ArrayList<View> viewList) {
mViewList = viewList;
} public int getPagerNum() {
return pagerNum;
} @Override
public int getCount() {
return mViewList.size();
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public void destroyItem(View arg0, int position, Object object) {
if (mViewList.get(position) != null) {
((ViewPager) arg0).removeView(mViewList.get(position));
}
} @Override
public Object instantiateItem(View container, int position) {
try {
if (mViewList.get(position).getParent() == null) {
((ViewPager) container).addView(mViewList.get(position), );
} else {
/*
* 很难理解新添加进来的view会自动绑定一个父类,由于一个儿子view不能与两个父类相关,
* 所以得解绑不这样做否则会产生 viewpager java.lang.IllegalStateException:
* The specified child already has a parent. You must call
* removeView() on the child's parent first.
*/
((ViewGroup) mViewList.get(position).getParent())
.removeView(mViewList.get(position));
((ViewPager) container).addView(mViewList.get(position), );
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pagerNum = position;
}
return mViewList.get(position);
} } private static class GetDataTask extends AsyncTask<Void, Void, Void> { PullToRefreshBase<?> mRefreshedView; public GetDataTask(PullToRefreshBase<?> refreshedView) {
mRefreshedView = refreshedView;
} @Override
protected Void doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep();
} catch (InterruptedException e) {
}
return null;
} @Override
protected void onPostExecute(Void result) {
mRefreshedView.onRefreshComplete();
super.onPostExecute(result);
}
}
}

源码下载:http://download.csdn.net/detail/shark0017/8036901

Android PullToRefreshListView和ViewPager的结合使用的更多相关文章

  1. Android中Fragment+ViewPager的配合使用

    官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...

  2. Android开发之ViewPager的简单使用

    ViewPager是V4包中的,如果你的编译器敲不出ViewPager,那么你就需要添加,看下面: 第一步:点击+号 第二步:选择第一个Library 第三步:添加这个包: 然后点击ok-->o ...

  3. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  4. Android:给ViewPager添加切换效果

    原文参照开发者官网:http://developer.android.com/training/animation/screen-slide.html#viewpager 以App的引导页为例: 首先 ...

  5. Android随笔--使用ViewPager实现简单地图片的左右滑动切换

    Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布 ...

  6. Android Material Design:ViewPager与android.support.design.widget.TabLayout双向交互联动切换

    通常,android.support.design.widget.TabLayout与Android的ViewPager联合使用,实现与ViewPager的切换与联动.(1)比如,当用户手指触摸选择T ...

  7. Android ActionBar与ViewPager合用

    内容可以左右滑动,因为使用了ViewPager(我这里用了V4包) view_pager_main.xml <?xml version="1.0" encoding=&quo ...

  8. Android:使用ViewPager实现左右滑动切换图片(图上有点点)

    在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...

  9. Android:使用ViewPager实现左右滑动切换图片 (简单版)

    ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...

随机推荐

  1. perl getopt 用法

    我们在linux经常常使用到一个程序须要增加參数,如今了解一下perl中的有关控制參数的函数.getopt.在linux有的參数有二种形式.一种是--help,还有一种是-h.也就是-和--的分别.- ...

  2. 解决局域网内无法IP访问IIS已发布的网站

    在IIS上发布的网站,本地可以访问,但是局域网内其他电脑却访问不了,原来是防火墙的问题,关闭它就可以访问了. 上面是我的简单操作 后来又百度了一下,发现有个更详细的操作:http://jingyan. ...

  3. Django(1.7 part1)

    django安装: django解压后目录下有一个setup.py文件,在命令行运行python setup.py install,当前前提是已经安装了python才能执行命令,然后用下面命令检查dj ...

  4. 51nod 1179 最大的最大公约数 (打表计数法)

    题目: 考虑清楚就简单了,我们把每个数的因子计数. 两个数的公约数就是计数超过2的数,然后找到最大的那个就好了. 计算每个数的素因子,记得sqrt(),不然会超时. 打表计数法时间复杂度O(n*sqr ...

  5. angular 报错笔记

    1.错误信息: Failed to instantiate module app due to: Error: [$injector:unpr] http://errors.angularjs.org ...

  6. HDU 1950 Bridging signals【最长上升序列】

    解题思路:题目给出的描述就是一种求最长上升子序列的方法 将该列数an与其按升序排好序后的an'求出最长公共子序列就是最长上升子序列 但是这道题用这种方法是会超时的,用滚动数组优化也超时, 下面是网上找 ...

  7. python面向对象的成员、属性等

    #类成员: #字段 self.xy =qq . xy=qq #普通字段 (保存在对象里面) #直接通过点(.)+ 字段 进行调用 #静态字段 (保存在类里面) #静态字段属于类,在内存只保留一份 . ...

  8. swift语言点评六-Numbers and Basic Values

    Topics Logical Values struct Bool A value type whose instances are either true or false. Numeric Val ...

  9. 洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大

    我们将线段树套在树状数组上,查询前预处理出所有要一起移动的节点编号,并在查询过程中一起将这些节点移到左右子树上. Code: #include<cstdio> #include<cs ...

  10. js+css实现全局loading加载

    js var Mask = function() { //定义一个Mask对象 this.btn = ["取消", "确定"], this.init = fun ...