PillToRefresh上拉下拉Y

来源:互联网 发布:淘宝网店地址怎么改 编辑:程序博客网 时间:2024/05/20 16:36

创建工程,导入Library包

File-->new-->Import Module

添加Library的路径,写入name为工程名

在pullToRefreshLibrary库下的build.gradle修改相应版本

compileSdkVersion26

buildToolsVersion "26.0.2"
在自己的App下按F4,选择Dependencice标签,点击加号选择Module dependency,添加Library包

引入成功之后打开项目的project.properties文件查看android.library.reference.1=../Android-PullToRefresh-master/library


主页面

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:ptr="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.example.pulltorefreshdome.MainActivity">
 <!--    ptr:ptrDrawable="@drawable/default_ptr_flip":刷新时显示的图片    ptr:ptrAnimationStyle="flip":刷新的图片以何种方式显示出来    ptr:ptrHeaderBackground="#383838":刷新时头部的布局    ptr:ptrHeaderTextColor="#FFFFFF":刷新时头部字体的颜色-->
    <com.handmark.pulltorefresh.library.PullToRefreshListView        android:id="@+id/pull_lv"        android:layout_width="match_parent"        android:layout_height="match_parent"        ptr:ptrDrawable="@drawable/default_ptr_flip"        ptr:ptrAnimationStyle="flip"        ptr:ptrHeaderBackground="#383838"        ptr:ptrHeaderTextColor="#FFFFFF"></com.handmark.pulltorefresh.library.PullToRefreshListView></RelativeLayout>

list_item

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    <ImageView        android:id="@+id/img"        android:layout_width="100dp"        android:layout_height="100dp"        android:src="@mipmap/ic_launcher"/>    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="234"/></LinearLayout>

UsersBean

MainActivity

package com.example.pulltorefreshdome;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;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.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private Handler myHandler = new Handler();    private PullToRefreshListView plv;    private List<UsersBean.NewslistBean> list = new ArrayList<>();    private List<UsersBean.NewslistBean> lists = new ArrayList<>();    int index=1;    MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        plv = (PullToRefreshListView) findViewById(R.id.plv);        init();        initdata();    }    public void initdata() {        index = 1;        MyTask task = new MyTask(new MyTask.Icallback() {            @Override            public void Updatatext(String str) {                Gson gson = new Gson();                UsersBean u = gson.fromJson(str, UsersBean.class);                list = u.getNewslist();                lists.addAll(list);                setAdapter();            }        });        task.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index);    }    public void addtoTop() {        index = 1;        MyTask task = new MyTask(new MyTask.Icallback() {            @Override            public void Updatatext(String str) {                Gson gson = new Gson();                UsersBean u = gson.fromJson(str, UsersBean.class);                list = u.getNewslist();                lists.addAll(0,list);            }        });        task.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index);    }    public void addtoBottom() {        index++;        MyTask task = new MyTask(new MyTask.Icallback() {            @Override            public void Updatatext(String str) {                Gson gson = new Gson();                UsersBean u = gson.fromJson(str, UsersBean.class);                list = u.getNewslist();                lists.addAll(list);            }        });        task.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();            plv.setAdapter(adapter);        } else {            adapter.notifyDataSetChanged();        }    }    class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int position) {            return list.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(MainActivity.this, R.layout.list_item, null);                holder = new ViewHolder();                holder.img = (ImageView) convertView.findViewById(R.id.img);                holder.tv = (TextView) convertView.findViewById(R.id.tv);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();                }            holder.tv.setText(list.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(list.get(position).getPicUrl(), holder.img, options);            return convertView;        }        class ViewHolder {            ImageView img;            TextView tv;        }    }}

MyApplication
package com.example.pulltorefreshdome;import android.app.Application;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import java.io.File;/** * Created by ass on 2017/10/19. */public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        File cacheFile=getExternalCacheDir();        ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this)                .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽                .threadPoolSize(2)//线程池的数量                .threadPriority(4)                .memoryCacheSize(2*1024*1024)//设置内存缓存区大小                .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小                .diskCache(new UnlimitedDiskCache(cacheFile))//自定义缓存目录                .writeDebugLogs()//打印日志内容                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理                .build();        ImageLoader.getInstance().init(config);    }}
MyTask
package com.example.pulltorefreshdome;import android.os.AsyncTask;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by ass on 2017/10/19. */public class MyTask extends AsyncTask<String,Void,String> {    private Icallback icallback;    private StringBuilder sb;    public MyTask(Icallback icallback) {        this.icallback = icallback;    }    @Override    protected String doInBackground(String... params) {        try {            URL url=new URL(params[0]);            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setRequestMethod("GET");            urlConnection.setReadTimeout(2000);            urlConnection.setConnectTimeout(2000);            Log.i("zzz", "醉了"+urlConnection.getResponseCode());            if(urlConnection.getResponseCode()==200){                InputStream inputStream = urlConnection.getInputStream();                sb=new StringBuilder();                String con;                BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));                if((con=br.readLine())!=null){                    sb.append(con);                }                return sb.toString();            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return null;    }    @Override    protected void onPostExecute(String s) {        super.onPostExecute(s);        icallback.Updatatext(s);    }    public interface Icallback{        void Updatatext(String str);    }}

drawble
ic_empty.xml;ic_error.xml;ic_stub.xml添加
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"></selector>
 
原创粉丝点击