需要的jar包
com.google.code.gson:gson:2.8.5
还有一个依赖类pulltolibrary
xml的代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.pulltolibrary.PullToRefreshListView
android:id="@+id/Pull_To_Re"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.example.pulltolibrary.PullToRefreshListView>
</android.support.constraint.ConstraintLayout>
适配器
package com.example.administrator.pulltorefresh.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.administrator.pulltorefresh.R;
import com.example.administrator.pulltorefresh.bean.MyData;
import java.util.ArrayList;
public class MyAdapter extends BaseAdapter {
private Context context;
private ArrayList<MyData.DataBean> datas;
public MyAdapter(Context context, ArrayList<MyData.DataBean> datas) {
this.context = context;
this.datas = datas;
}
public ArrayList<MyData.DataBean> getDatas() {
return datas;
}
public void setDatas(ArrayList<MyData.DataBean> datas) {
this.datas = datas;
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.listview_item, null);
holder.tv_name = convertView.findViewById(R.id.ListView_Title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//赋值
holder.tv_name.setText(datas.get(position).getNews_title());
return convertView;
}
class ViewHolder {
TextView tv_name;
}
}
BaseActivity基类抽取
package com.example.administrator.pulltorefresh.baseactivity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
//用来更改页面布局
protected abstract int getLayoutId();
//初始化数据
protected abstract void initData();
//初始化组件
protected abstract void findViewById();
//获取上一个页面传过来的参数
protected abstract void getNextData();
//注册监听
protected abstract void setlistener();
//页面逻辑书写
protected abstract void progressLogic();
void init() {
if (getLayoutId() != 0) {
setContentView(getLayoutId());
initData();
findViewById();
getNextData();
setlistener();
progressLogic();
} else {
throw new IllegalArgumentException("请加上布局文件");
}
}
}
Activity的代码
package com.example.administrator.pulltorefresh;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ListView;
import com.example.administrator.pulltorefresh.adapter.MyAdapter;
import com.example.administrator.pulltorefresh.baseactivity.BaseActivity;
import com.example.administrator.pulltorefresh.bean.MyData;
import com.example.pulltolibrary.PullToRefreshBase;
import com.example.pulltolibrary.PullToRefreshListView;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity {
private PullToRefreshListView pull;
private Context context;
private MyAdapter adapter;
private ArrayList<MyData.DataBean> mdatas = new ArrayList<>();
private int mStart = 1;
private String mUrl = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//进行判断
if (msg.what == 0) {
mdatas.addAll((List<MyData.DataBean>) msg.obj);
//进行刷新
adapter.notifyDataSetChanged();
//取消一直刷新的方法
pull.onRefreshComplete();
}
}
};
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
private void getData(final int index) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(mUrl + index);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//进行判断
if (connection.getResponseCode() == 200) {
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
Gson gson = new Gson();
MyData myData = gson.fromJson(reader, MyData.class);
handler.sendMessage(handler.obtainMessage(0, myData.getData()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
protected void findViewById() {
pull = findViewById(R.id.Pull_To_Re);
//设置上下拉滑动的
pull.setMode(PullToRefreshBase.Mode.BOTH);
adapter = new MyAdapter(MainActivity.this, mdatas);
pull.setAdapter(adapter);
}
@Override
protected void getNextData() {
}
//监听的方法
@Override
protected void setlistener() {
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override //鼠标按下
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
mStart = 1;
mdatas.clear();
getData(mStart);
}
@Override //鼠标抬起
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
mStart++;
getData(mStart);
}
});
}
@Override
protected void progressLogic() {
getData(mStart);
}
@Override
public void onClick(View v) {
}
}
以上