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>
阅读全文
0 0
- PillToRefresh上拉下拉Y
- DrawerLayout侧滑+Image-Loader+XListView+上拉下拉 Y
- 上拉下拉电阻
- spi 上拉下拉
- 上拉下拉电阻
- RecyclerView上拉下拉
- PullOnrefreshListView上拉下拉
- pulltorefresh上拉下拉
- XListView上拉下拉
- pulltorefreshdemo 上拉下拉
- 上拉下拉加载
- XRecyclerView上拉下拉
- PullToRefreshListView上拉下拉
- ListView上拉下拉刷新
- 上拉下拉复位SMBus
- 上拉下拉的原理
- UITableView上拉下拉刷新
- UITableableview上拉下拉刷新
- Android界面布局
- 从上往下打印出二叉树的每个结点
- viewpager+TabLayout联动
- linux 加载insmod和卸载rmmod驱动
- 究竟什么是RSSI
- PillToRefresh上拉下拉Y
- App Privacy Terms
- js 字符串中包含某个字符的使用
- 中控考勤机web3.0登录账号密码
- 【Windows管理工具】-WMIC
- Swift 中 判断101-200之间有多少个素数,并输出所有素数
- 初识Spring Boot框架
- 程序设计C 实验二 题目一 计算员工周工资(0077)
- 有关二叉排序树的代码实现