先导入一个library 然后在添加进去
package com.bwie.pulltofrfresh; import android.graphics.Bitmap; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.bwie.pulltofrfresh.Utils.MyTask; import com.bwie.pulltofrfresh.adapter.MyAdapter; import com.bwie.pulltofrfresh.bean.User; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private Handler myHandler=new Handler(); private PullToRefreshListView plv; private List<User.NewslistBean> list=new ArrayList<>(); private List<User.NewslistBean> lists=new ArrayList<>(); private ArrayAdapter adapter; private int index=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); plv = (PullToRefreshListView) findViewById(R.id.plv); initdata(); setAdapter(); init(); } public void initdata(){ index++; MyTask myTask=new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson=new Gson(); User user = gson.fromJson(jsonstr, User.class); list=user.getNewslist(); lists.addAll(list); } }); myTask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index); } public void addtoTop(){ index++; MyTask myTask=new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson=new Gson(); User user = gson.fromJson(jsonstr, User.class); list=user.getNewslist(); lists.addAll(0,list); } }); myTask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index); } public void addtoBottom(){ index++; MyTask myTask=new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson=new Gson(); User user = gson.fromJson(jsonstr, User.class); list=user.getNewslist(); lists.addAll(list); } }); myTask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index); } public void init() { //设置刷新模式 ,both代表支持上拉和下拉,pull_from_end代表上拉,pull_from_start代表下拉 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("放开刷新..."); /*如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。 当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法. 加载数据完成后 必须 调用下 onRefreshComplete() 完成关闭 header,footer视图 */ plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下拉刷新的回调 //下拉刷新的数据,显示在listview列表的最上面 addtoTop(); myHandler.postDelayed(new Runnable() { @Override public void run() { //刷新完成,必须在异步下完成 plv.onRefreshComplete(); //刷新适配器 setAdapter(); } }, 1000); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {//上拉加载的回调 //加载更多的数据,添加到集合列表的最后面 addtoBottom(); myHandler.postDelayed(new Runnable() { @Override public void run() { //刷新完成,必须在异步下完成 plv.onRefreshComplete(); //刷新适配器 setAdapter(); } }, 1000); } }); } public void setAdapter() { if (adapter == null) { MyAdapter adapter = new MyAdapter(lists,MainActivity.this); plv.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } } }
布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="com.bwie.pulltofrfresh.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/plv" /> </RelativeLayout>
适配器
package com.bwie.pulltofrfresh.adapter; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.bwie.pulltofrfresh.MainActivity; import com.bwie.pulltofrfresh.R; import com.bwie.pulltofrfresh.bean.User; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /** * Created by 老北城 on 2017/10/19. */ public class MyAdapter extends BaseAdapter { private List<User.NewslistBean> lists; private Context context; public MyAdapter(List<User.NewslistBean> lists, Context context) { this.lists = lists; this.context = context; } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView=View.inflate(context, R.layout.item,null); holder=new ViewHolder(); holder.img= (ImageView) convertView.findViewById(R.id.img); holder.text= (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); }else{ holder= (ViewHolder) convertView.getTag(); } Log.i("zzz",lists.toString()); holder.text.setText(lists.get(position).getTitle()); DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true)//进行内存缓存 .cacheOnDisk(true)//进行sd卡缓存 .showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片 .showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时 .showImageOnFail(R.drawable.ic_error)//下载错误时 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片质量 .build(); //第三步:进行加载显示 ImageLoader.getInstance().displayImage(lists.get(position).getPicUrl(), holder.img, options); return convertView; } } class ViewHolder{ ImageView img; TextView text; }
本文介绍了一个基于 PullToRefreshListView 的实现案例,包括如何设置刷新模式、自定义刷新提示文案及实现上拉加载和下拉刷新功能。此外,还展示了如何使用 Gson 解析 JSON 数据并将其展示在 ListView 中。
1855

被折叠的 条评论
为什么被折叠?



