Android PullToRefreshListView和ViewPager的结合使用
其实这个不是什么新东西了,在介绍(一)中我们就知道了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的结合使用相关推荐
- Android开发之ViewPager滑动页面效果实现(源代码分享)
我们先来谷歌官方文档对viewpager的介绍,该类允许用户通过页面翻转左右的数据,需要通过实现PagerAdapter适配器来生成视图显示的页面.因为注意这个类是早期设计和开发的,API可能会改变, ...
- Android中Fragment+ViewPager的配合使用
原本在上一篇博客中要讲解一个Fragment的综合应用,但是中间又想到了滑屏方式,所以就分类在总结了一下,(http://smallwoniu.blog.51cto.com/3911954/13089 ...
- Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每
Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每 Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个 ...
- android中viewpager+fragment,Android开发之ViewPager+Fragment
使用步骤 1.Activity的布局文件 android:id="@+id/viewpager" android:layout_width="wrap_content&q ...
- android实现滑动切换图,Android:使用ViewPager实现左右滑动切换图片加点点
图片发自简书App 1.引入android-support-v4.jar包,在主布局里加入 < ?xml version="1.0" encoding="utf-8 ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可以 ...
- Android嵌套式ViewPager,垂直ViewPager
In this tutorial, we'll be implementing android nested ViewPager i.e a ViewPager within a ViewPager. ...
- android布局高度大于屏幕高度,Android CoordinatorLayout + AppbarLayout + Viewpager布局超过屏幕高度...
当我把Viewpager与CoordinatorLayout + AppbarLayout + Viewpager一起使用时,viewpager超出屏幕大小,请帮我解决.Android Coordin ...
- Android UI设计——ViewPager中设置底部显示圆点焦点(二)
ViewPager中设置底部显示圆点焦点这种使用其实还是很常见的,对于这个功能的实现其实有很多方式: 1. 通过在显示图片中加入圆点,也就是我们可以直接使用带圆点的图片. 2. 通过在代码中实现这一功 ...
最新文章
- c语言实现线性结构(数组与链表)
- 魅蓝android底层是什么,集体去YunOS化:魅蓝2\魅蓝Metal更换安卓底层
- WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法
- DES加密解密与AES加密解密
- 海康、大华IPC的rtsp格式
- 判断是否大于_电动车是否属于机动车的辩论要点
- 【Paper】AAAI 2020 故事生成模型 之 角色一致性
- linux唤醒所有等待线程,转Linux多线程同步的几种方式
- Docker镜像使用详解
- MOSFET知识小结
- 风机风向玫瑰图原理!
- Qlikview出现异常重复计数的解决办法
- 方阵求值——上三角行列式、定义(康拓展开求值)
- 【oracle】oracle筛选后导出表,载入对象选择,保存对象选择,save object selection的使用,过滤clob导出,利用osf文件
- JAVA 协程Quasar初探
- Linux CentOS(常用命令)
- 知乎|推荐10个大学生需要收藏的良心网站
- Android传感器的使用开发、简易指南针
- Vs2013未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包 解决方案
- The Pilots Brothers refrigerator's 题解
热门文章
- C语言实现简易通讯录
- java表达式类型自动提升
- 双网卡绑定-bond0
- 小学生家庭教育与学习心理
- 使用ISA Server发布具有Edge角色的Exchange Server环境
- 查找 framework 文件中是否包含 WKWebView
- java中可以改变引用的指向吗_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
- Nessus更新到8.5.0
- 内存储器和cpu一起构成了计算机,计算机系统的组成
- zb如何导出自己画的_zbrush纹理贴图(zbrush怎么导出映射贴图)