其实这个不是什么新东西了,在介绍(一)中我们就知道了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.ViewPagerandroid: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数组,传入viewprivate ArrayList<View> mViewList;private int pagerNum = 0;public ListViewPagerAdapter(ArrayList<View> viewList) {mViewList = viewList;}public int getPagerNum() {return pagerNum;}@Overridepublic int getCount() {return mViewList.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic void destroyItem(View arg0, int position, Object object) {if (mViewList.get(position) != null) {((ViewPager) arg0).removeView(mViewList.get(position));}}@Overridepublic Object instantiateItem(View container, int position) {try {if (mViewList.get(position).getParent() == null) {((ViewPager) container).addView(mViewList.get(position), 0);} 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), 0);}} 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 = { "1", "2", "3","4", "5", "6", "7", "8", "9", "10", "11","12", "13", "14", "15", "16", "17","18", "19", "20",  };ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, data);//找到listView的布局,生成可以下拉刷新的listView,添加到视图列表中LayoutInflater inflater = LayoutInflater.from(getApplication());for (int i = 0; i < 4; i++) {PullToRefreshListView plv = (PullToRefreshListView) inflater.inflate(R.layout.layout_listview_in_viewpager,  null);plv.setAdapter(adapter);plv.setOnRefreshListener(new OnRefreshListener<ListView>() {@Overridepublic 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;}@Overrideprotected Void doInBackground(Void... params) {// Simulates a background job.try {Thread.sleep(2000);} catch (InterruptedException e) {}return null;}@Overrideprotected 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;@Overrideprotected 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 = { "1", "2", "3","4", "5", "6", "7", "8", "9", "10", "11","12", "13", "14", "15", "16", "17","18", "19", "20",  };ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, data);//找到listView的布局,生成可以下拉刷新的listView,添加到视图列表中LayoutInflater inflater = LayoutInflater.from(getApplication());for (int i = 0; i < 4; i++) {PullToRefreshListView plv = (PullToRefreshListView) inflater.inflate(R.layout.layout_listview_in_viewpager,  null);plv.setAdapter(adapter);plv.setOnRefreshListener(new OnRefreshListener<ListView>() {@Overridepublic 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数组,传入viewprivate ArrayList<View> mViewList;private int pagerNum = 0;public ListViewPagerAdapter(ArrayList<View> viewList) {mViewList = viewList;}public int getPagerNum() {return pagerNum;}@Overridepublic int getCount() {return mViewList.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic void destroyItem(View arg0, int position, Object object) {if (mViewList.get(position) != null) {((ViewPager) arg0).removeView(mViewList.get(position));}}@Overridepublic Object instantiateItem(View container, int position) {try {if (mViewList.get(position).getParent() == null) {((ViewPager) container).addView(mViewList.get(position), 0);} 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), 0);}} 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;}@Overrideprotected Void doInBackground(Void... params) {// Simulates a background job.try {Thread.sleep(2000);} catch (InterruptedException e) {}return null;}@Overrideprotected void onPostExecute(Void result) {mRefreshedView.onRefreshComplete();super.onPostExecute(result);}}
}

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

Android PullToRefreshListView和ViewPager的结合使用相关推荐

  1. Android开发之ViewPager滑动页面效果实现(源代码分享)

    我们先来谷歌官方文档对viewpager的介绍,该类允许用户通过页面翻转左右的数据,需要通过实现PagerAdapter适配器来生成视图显示的页面.因为注意这个类是早期设计和开发的,API可能会改变, ...

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

    原本在上一篇博客中要讲解一个Fragment的综合应用,但是中间又想到了滑屏方式,所以就分类在总结了一下,(http://smallwoniu.blog.51cto.com/3911954/13089 ...

  3. Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每

    Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每 Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个 ...

  4. android中viewpager+fragment,Android开发之ViewPager+Fragment

    使用步骤 1.Activity的布局文件 android:id="@+id/viewpager" android:layout_width="wrap_content&q ...

  5. android实现滑动切换图,Android:使用ViewPager实现左右滑动切换图片加点点

    图片发自简书App 1.引入android-support-v4.jar包,在主布局里加入 < ?xml version="1.0" encoding="utf-8 ...

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

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

  7. Android嵌套式ViewPager,垂直ViewPager

    In this tutorial, we'll be implementing android nested ViewPager i.e a ViewPager within a ViewPager. ...

  8. android布局高度大于屏幕高度,Android CoordinatorLayout + AppbarLayout + Viewpager布局超过屏幕高度...

    当我把Viewpager与CoordinatorLayout + AppbarLayout + Viewpager一起使用时,viewpager超出屏幕大小,请帮我解决.Android Coordin ...

  9. Android UI设计——ViewPager中设置底部显示圆点焦点(二)

    ViewPager中设置底部显示圆点焦点这种使用其实还是很常见的,对于这个功能的实现其实有很多方式: 1. 通过在显示图片中加入圆点,也就是我们可以直接使用带圆点的图片. 2. 通过在代码中实现这一功 ...

最新文章

  1. c语言实现线性结构(数组与链表)
  2. 魅蓝android底层是什么,集体去YunOS化:魅蓝2\魅蓝Metal更换安卓底层
  3. WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法
  4. DES加密解密与AES加密解密
  5. 海康、大华IPC的rtsp格式
  6. 判断是否大于_电动车是否属于机动车的辩论要点
  7. 【Paper】AAAI 2020 故事生成模型 之 角色一致性
  8. linux唤醒所有等待线程,转Linux多线程同步的几种方式
  9. Docker镜像使用详解
  10. MOSFET知识小结
  11. 风机风向玫瑰图原理!
  12. Qlikview出现异常重复计数的解决办法
  13. 方阵求值——上三角行列式、定义(康拓展开求值)
  14. 【oracle】oracle筛选后导出表,载入对象选择,保存对象选择,save object selection的使用,过滤clob导出,利用osf文件
  15. JAVA 协程Quasar初探
  16. Linux CentOS(常用命令)
  17. 知乎|推荐10个大学生需要收藏的良心网站
  18. Android传感器的使用开发、简易指南针
  19. Vs2013未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包 解决方案
  20. The Pilots Brothers refrigerator's 题解

热门文章

  1. C语言实现简易通讯录
  2. java表达式类型自动提升
  3. 双网卡绑定-bond0
  4. 小学生家庭教育与学习心理
  5. 使用ISA Server发布具有Edge角色的Exchange Server环境
  6. 查找 framework 文件中是否包含 WKWebView
  7. java中可以改变引用的指向吗_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
  8. Nessus更新到8.5.0
  9. 内存储器和cpu一起构成了计算机,计算机系统的组成
  10. zb如何导出自己画的_zbrush纹理贴图(zbrush怎么导出映射贴图)