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.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的结合使用的更多相关文章
- Android中Fragment+ViewPager的配合使用
官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...
- Android开发之ViewPager的简单使用
ViewPager是V4包中的,如果你的编译器敲不出ViewPager,那么你就需要添加,看下面: 第一步:点击+号 第二步:选择第一个Library 第三步:添加这个包: 然后点击ok-->o ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android:给ViewPager添加切换效果
原文参照开发者官网:http://developer.android.com/training/animation/screen-slide.html#viewpager 以App的引导页为例: 首先 ...
- Android随笔--使用ViewPager实现简单地图片的左右滑动切换
Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布 ...
- Android Material Design:ViewPager与android.support.design.widget.TabLayout双向交互联动切换
通常,android.support.design.widget.TabLayout与Android的ViewPager联合使用,实现与ViewPager的切换与联动.(1)比如,当用户手指触摸选择T ...
- Android ActionBar与ViewPager合用
内容可以左右滑动,因为使用了ViewPager(我这里用了V4包) view_pager_main.xml <?xml version="1.0" encoding=&quo ...
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
随机推荐
- UVA 1016 - Silly Sort 置换分解 贪心
Silly Sort Your younger brother has an assignment and needs s ...
- POJ 3261 后缀数组+二分
思路: 论文题- 二分+对后缀分组 这块一开始不用基数排序 会更快的(其实区别不大) //By SiriusRen #include <cstdio> #include <cstri ...
- crontab任务调度
基本语法 crontab [选项] 选项: -e: 编辑crontab定时任务 -l: 查询crontab任务 -r: 删除当前用户所有的crontab任务 2)参数说明 [root ...
- DISM
C:\WINDOWS\system32>DISM /Online /Cleanup-image /RestoreHealth 部署映像服务和管理工具版本: 10.0.16193.1001 映像版 ...
- 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- hiho1509 异或排序
题目链接 题目大意: 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < ...
- size_type类型
由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型 string::size_type它 ...
- Map和WeakMap的区别
个人总结:在一个变量作用域中,如果结束到作用域结尾 } 的话,map中的引用会被垃圾回收机制回收的是weakmap ,map中的引用不会被垃圾回收机制回收的是map. 强引用:只要引用存在,垃圾回收器 ...
- [HDU5688]2016"百度之星" - 资格赛 Problem D
题目大意:给你n个字符串,如果一个字符串可以通过重新排列变成另一个字符串,则认为这两个字符串相等.每输入一个字符串,输出这个字符串和与它相等的之前出现了几次. 解题思路:我们可以用map保存一个字符串 ...
- 《Linux 进程间通信》命名管道:FIFO
命名管道的主要用途:不相关的进程之间交换数据. 命令行上创建命名管道: $ mkfifo filename 程序中创建命名管道: #include <sys/types.h> #incl ...