准备工作:
第一步:导入pullToRefresh的工程,注意需要16版本的sdk,与19版本的构建工具(需要连网下载)
第二步:将工程作为依赖库添加到自己的工程中
使用步骤:
第一步:在布局文件中添加PullToRefreshScrollView组件
<!--
ptr:ptrDrawable="@drawable/default_ptr_flip":刷新时显示的图片
ptr:ptrAnimationStyle="flip":刷新的图片以何种方式显示出来
ptr:ptrHeaderBackground="#383838":刷新时头部的布局
ptr:ptrHeaderTextColor="#FFFFFF":刷新时头部字体的颜色
还需要添加以下的命名空间
xmlns:ptr="http://schemas.android.com/apk/res-auto"
-->
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
android:id="@+id/refresh_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
ptr:ptrAnimationStyle="flip"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrHeaderBackground="#383838"
ptr:ptrHeaderTextColor="#FFFFFF">
<!--在scrollView中添加组件 viewPager和ListView
注意:在scrollView中只能有一个子孩子-->
<!--在scrollView中添加可滑动组件需要重新计算高度,例如listview-->
<!--
listview需要重写,新建一个类继承listview,重写内置方法
public class MyListview extends ListView {
public MyListview(Context context) {
super(context);
}
public MyListview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//重新计算高度的具体方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
-->
<linearLayout>
<ViewPager></viewPager>
<ListView></ListView>
</linearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
第二步:查找组件,并对PullToRefreshScrollView进行初使化
//查找组件
PullToRefreshScrollView rsv = (PullToRefreshScrollView) findViewById(R.id.refresh_scroll_view);
//进行初使化 (1.设置模式 2.通过getLoadingLayoutProxy方法设置header与footer的刷新显示文字 3.设置监听事件)
private void intRefreshScrollView() {
//1.设置模式
rsv.setMode(PullToRefreshBase.Mode.BOTH);
//2.通过调用getLoadingLayoutProxy方法,设置下拉刷新状况布局中显示的文字 ,第一个参数为true,代表下拉刷新
ILoadingLayout headLables = rsv.getLoadingLayoutProxy(true, false);
headLables.setPullLabel("下拉刷新");
headLables.setRefreshingLabel("正在刷新");
headLables.setReleaseLabel("松开刷新");
//2.设置上拉加载底部视图中显示的文字,第一个参数为false,代表上拉加载更多
ILoadingLayout footerLables = rsv.getLoadingLayoutProxy(false, true);
footerLables.setPullLabel("上拉加载");
footerLables.setRefreshingLabel("正在载入...");
footerLables.setReleaseLabel("松开加载更多");
//3.设置监听事件
rsv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
addToTop();//请求网络数据,并更新listview组件
refreshComplete();//数据加载完成后,关闭header,footer
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
addToBottom()//请求网络数据,并更新listview组件
refreshComplete();//数据加载完成后,关闭header,footer
}
});
}
/**
* 刷新完成时关闭
*/
public void refreshComplete(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
rsv.onRefreshComplete();
}
},1000);
}
//数据引用的方法
public void initData(){
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex);
}
//下拉加载的方法:
public void addtoTop(){
pageIndex--;
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(0,bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex );
}
//上拉刷新的方法:
public void addtoBottom(){
pageIndex++;
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex);
}
//设置适配器的方法:
public void setAdapter(){
if(adapter==null){
adapter=new MyAdapter(MainActivity.this,list1);
listView.setAdapter(adapter);
}else{
//适配器刷新
adapter.notifyDataSetChanged();
}
}
///
package com.example.demo;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.Toast;
import com.example.demo.Adapter.MyAdapter;
import com.example.demo.Bean.Bean;
import com.example.demo.Util.MyTask;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
import com.youth.banner.Banner;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Banner banner;
private ListView listView;
private List<Bean.DataBean> list1=new ArrayList<>();
private List<Bean.DataScrollBean> list2=new ArrayList<>();
private List<String> list3=new ArrayList<>();
private PullToRefreshScrollView pull;
private MyAdapter adapter;
private int pageIndex=5;
private Handler myHandler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局
setContentView(R.layout.activity_main);
//找控件
banner = (Banner) findViewById(R.id.banner);
listView = (ListView) findViewById(R.id.listview);
pull = (PullToRefreshScrollView) findViewById(R.id.pull);
//加载数据
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr,Bean.class);
list2=bean.getDataScroll();
for (int i = 0; i < list2.size(); i++) {
//http://www.93.gov.cn
list3.add("http://www.93.gov.cn"+list2.get(i).getIMAGEURL());
}
banner.setImageLoader(new MyImageloder());
banner.setImages(list3);
banner.start();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0");
initData();
initLv();
}
public void initLv(){
//设置刷新模式 ,both代表支持上拉和下拉,pull_from_end代表上拉,pull_from_start代表下拉
pull.setMode(PullToRefreshBase.Mode.BOTH);
/*这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态
如果想区分上拉和下拉状态的不同,可以分别设置*/
ILoadingLayout startLabels = pull.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在拉");
startLabels.setReleaseLabel("放开刷新");
ILoadingLayout endLabels = pull.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");
//3.设置监听事件
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
addtoTop();//请求网络数据,并更新listview组件
refreshComplete();//数据加载完成后,关闭header,footer
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
addtoBottom();//请求网络数据,并更新listview组件
refreshComplete();//数据加载完成后,关闭header,footer
}
});
}
//数据引用的方法
public void initData(){
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex);
}
//下拉加载的方法:
public void addtoTop(){
pageIndex--;
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(0,bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex );
}
//上拉刷新的方法:
public void addtoBottom(){
pageIndex++;
MyTask myTask=new MyTask(new MyTask.Icallbacks() {
@Override
public void updateUiByjson(String jsonstr) {
Gson gson=new Gson();
Bean bean=gson.fromJson(jsonstr, Bean.class);
//添加到大集合对象中
list1.addAll(bean.getData());
//设置适配器
setAdapter();
}
});
myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex);
}
//设置适配器的方法:
public void setAdapter(){
if(adapter==null){
adapter=new MyAdapter(MainActivity.this,list1);
listView.setAdapter(adapter);
}else{
//适配器刷新
adapter.notifyDataSetChanged();
}
}
/**
* 刷新完成时关闭
*/
public void refreshComplete(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
pull.onRefreshComplete();
}
},1000);
}
}