PullToRefresh 上拉刷新,下拉加载网络数据 ListView

来源:互联网 发布:网络直播一群无聊人 编辑:程序博客网 时间:2024/05/02 06:13
package com.example.a1019;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;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.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;public class MainActivity extends AppCompatActivity {    private PullToRefreshListView pull_lv;    private Handler handler = new Handler();    private String str = "";    private List<Result.NewslistBean> newslist;    private MyAdapter myAdapter;    private int pageIndex = 1;    private DisplayImageOptions options;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pull_lv = (PullToRefreshListView) findViewById(R.id.pull_lv);        //进行内存缓存//进行sd卡缓存/*.showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片.showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时.showImageOnFail(R.drawable.ic_error)//下载错误时*///设置图片质量        new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex);        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();        //设置监听        initLV();    }    class MyAsync extends AsyncTask<String, Void, String> {        @Override        protected String doInBackground(String... params) {            //创建Url对象            try {                URL url = new URL(params[0]);                //打开连接                HttpURLConnection connection = (HttpURLConnection) url.openConnection();                //设置                connection.setRequestMethod("GET");                connection.setReadTimeout(3000);                connection.setConnectTimeout(3000);                int code = connection.getResponseCode();                if (code == 200) {                    InputStream inputStream = connection.getInputStream();                    str = streamToString(inputStream);                }            } catch (Exception e) {                e.printStackTrace();            }            return str;        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            Log.e("ZZZ",s+"11111111111111111");            //解析数据            Gson gson = new Gson();            Result result = gson.fromJson(str, Result.class);            newslist = result.getNewslist();            setAdapter();        }    }   public String streamToString(InputStream is) {                StringBuilder sb = new StringBuilder();                String con;                BufferedReader br = new BufferedReader(new InputStreamReader(is));                try {                    while ((con = br.readLine()) != null) {                        sb.append(con);                    }                } catch (IOException e) {// TODO Auto-generated catch block                    e.printStackTrace();                }                return sb.toString();            }            private void initLV() {                //设置支持上拉下拉刷新                pull_lv.setMode(PullToRefreshBase.Mode.BOTH);                //设置状态                ILoadingLayout startLabels = pull_lv.getLoadingLayoutProxy(true, false);                startLabels.setPullLabel("下拉刷新");                startLabels.setRefreshingLabel("正在拉");                startLabels.setReleaseLabel("放开刷新");                ILoadingLayout endLabels = pull_lv.getLoadingLayoutProxy(false, true);                endLabels.setPullLabel("上拉刷新");                endLabels.setRefreshingLabel("正在载入...");                endLabels.setReleaseLabel("放开刷新...");                //设置监听事件                pull_lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {                    @Override                    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                        //下拉刷新的回调方法                        //下拉刷新的数据,显示在listview列表的最上面                        addtoTop();                       // pageIndex=1;                        handler.postDelayed(new Runnable() {                            @Override                            public void run() {                                //刷新完成,必须在异步下完成                                pull_lv.onRefreshComplete();                                //刷新适配器                                setAdapter();                            }                        }, 1000);                    }                    @Override                    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {                        //上拉加载的回调                        //加载更多的数据,添加到集合列表的最后面                        addtoBottom();                        pageIndex++;                        handler.postDelayed(new Runnable() {                            @Override                            public void run() {                                //刷新完成,必须在异步下完成                                pull_lv.onRefreshComplete();                                //刷新适配器                                setAdapter();                            }                        }, 1000);                    }                });            }    private void addtoBottom() {        pageIndex++;        new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex);    }    private void addtoTop() {        pageIndex=1;        new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex);    }    private void setAdapter() {                if (myAdapter == null) {                    myAdapter = new MyAdapter();                    pull_lv.setAdapter(myAdapter);                } else {                    myAdapter.notifyDataSetChanged();                }            }            class MyAdapter extends BaseAdapter {                @Override                public int getCount() {                    return newslist.size();                }                @Override                public Object getItem(int position) {                    return newslist.get(position);                }                @Override                public long getItemId(int position) {                    return position;                }                @Override                public View getView(int position, View convertView, ViewGroup parent) {                    View view = View.inflate(MainActivity.this, R.layout.item, null);                    ImageView img =(ImageView) view.findViewById(R.id.img);                    TextView tv = (TextView) view.findViewById(R.id.tv);                    ImageLoader.getInstance().displayImage(newslist.get(position).getPicUrl(),img,options);                    tv.setText(newslist.get(position).getTitle());                    return view;                }            }}
//布局
<?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"    xmlns:ptr="http://schemas.android.com/apk/res-auto"    tools:context="com.example.a1019.MainActivity">    <com.handmark.pulltorefresh.library.PullToRefreshListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/pull_lv"        ptr:ptrDrawable="@drawable/default_ptr_flip"        ptr:ptrAnimationStyle="flip"        ptr:ptrHeaderBackground="#383838"        ptr:ptrHeaderTextColor="#FFFFFF"        ></com.handmark.pulltorefresh.library.PullToRefreshListView>


阅读全文
0 0
原创粉丝点击