布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--
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.PullToRefreshListView
android:id="@+id/ptf"
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"></com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
package com.bwie.android.demo1.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.bwie.android.demo1.ListAdapter;
import com.bwie.android.demo1.R;
import com.bwie.android.demo1.bean.NewsBean;
import com.bwie.android.demo1.utils.MyAsyncTask;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
public class MainFragmnet extends Fragment {
private int num = 10;
private View view;
// 设置标记
public static int TYPE_UP = 1;
private ListAdapter listAdapter;
private List<NewsBean.NewslistBean> list = new ArrayList<>();
private PullToRefreshListView plv;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.main_frag, container, false);
//initView();
// initData();
plv = view.findViewById(R.id.ptf);
initPlv();
requestNetData();
return view;
}
private void requestNetData() {
String urlPath = "http://api.tianapi.com/world/?key=8322c06e5b327bbd19a026a643835f7e&num=" + num;
MyAsyncTask task = new MyAsyncTask(new MyAsyncTask.IcallBack() {
@Override
public void getDada(String jsonStr) {
Gson gson = new Gson();
NewsBean newsBean = gson.fromJson(jsonStr, NewsBean.class);
List<NewsBean.NewslistBean> newslist = newsBean.getNewslist();
// 调用设置适配器的方法
if (TYPE_UP == 2) {
list.clear();//清除所有数据
}
// 添加到集合
list.addAll(newslist);
setPlvAdapter();
// 关闭头尾布局
plv.onRefreshComplete();
}
});
task.execute(urlPath);
}
public void setPlvAdapter() {
if (listAdapter == null) {
listAdapter = new ListAdapter(list, getActivity());
plv.setAdapter(listAdapter);
} else {
listAdapter.notifyDataSetChanged();
}
}
/**
* 初始化PullToRefreshListView
*/
private void initPlv() {
// 设置模式 BOTH 支持上拉加载 下拉刷新
plv.setMode(PullToRefreshBase.Mode.BOTH);
// 设置头尾布局的文字
/*这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,
第一个true 代表下来状态 ,第二个true 代表上拉的状态
如果想区分上拉和下拉状态的不同,可以分别设置*/
ILoadingLayout startLabels = plv.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在拉");
startLabels.setReleaseLabel("放开刷新");
ILoadingLayout endLabels = plv.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");
// 设置监听
plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
// 刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
TYPE_UP = 2;
num = 10;
requestNetData();
}
//加载
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
TYPE_UP = 1;
num += 5;
requestNetData();
}
});
}
}
```## 请求数据
private void requestNetData() {
String urlPath = "http://api.tianapi.com/world/?key=8322c06e5b327bbd19a026a643835f7e&num=" + num;
MyAsyncTask task = new MyAsyncTask(new MyAsyncTask.IcallBack() {
@Override
public void getDada(String jsonStr) {
Gson gson = new Gson();
NewsBean newsBean = gson.fromJson(jsonStr, NewsBean.class);
List<NewsBean.NewslistBean> newslist = newsBean.getNewslist();
if (TYPE_UP == 2) {
list.clear();//清除所有数据
}
// 添加到集合
list.addAll(newslist);
//设置适配器
setPlvAdapter();
// 关闭头尾布局
plv.onRefreshComplete();
}
});
task.execute(urlPath);
}
//设置适配器
public void setPlvAdapter() {
if (listAdapter == null) {
listAdapter = new ListAdapter(list, getActivity());
plv.setAdapter(listAdapter);
} else {
listAdapter.notifyDataSetChanged();
}
}