Android-PullToRefresh下拉刷新步骤及参考代码

Android-PullToRefresh下拉刷新步骤

1 导入第三方插件库
Android-PullToRefresh-master.zip

2 在布局文件中使用第三方插件
com.handmark.pulltorefresh.library.PullToRefreshListView

3 给PullToRefreshListView控件设置相关属性
plv_main_1.setMode(Mode.BOTH);// 设置刷新模式

Mode.BOTH:同时支持上拉下拉
Mode.PULL_FROM_START:只支持下拉Pulling Down
Mode.PULL_FROM_END:只支持上拉Pulling Up

plv_main_1.getLoadingLayoutProxy().setPullLabel("上拉刷

新…");// 刚下拉时,显示的提
plv_main_1.getLoadingLayoutProxy().setRefreshingLabel("正在载

入…");// 刷新时
plv_main_1.getLoadingLayoutProxy().setReleaseLabel("放开刷

新…");// 下来达到一定距离时,显示的提示

4,给该控件添加刷新的监听事件,执行异步操作

lv_main_booklist.setOnRefreshListener(new

PullToRefreshBase.OnRefreshListener() {
@Override//6.给该控件添加刷新的监听事件
public void onRefresh(PullToRefreshBase

refreshView) {
new myAsyncTask().execute();//执行异步操作
}
});

5获取控件,自定义适配器(BaseAdapter)提供数据

6 异步任务查询数据(AsyncTask)
2.5.1 AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String

2.6.2 异步加载数据最少要重写以下这两个方法
2.6.2.1 doInBackground(Params…)请求数据 后台执行,比较

耗时的操作都可以放在这里
2.6.2.2 onPostExecute(Result) 去回调,通知展示数据已发生改

变.
–注:此方法中再通知适配器和控件
myBaseAdapter.notifyDataSetChanged();// 通知适配器数据已

改变
plv_main_plv1.onRefreshComplete();// 通知控件数据已经加

载完毕

参考代码如下:
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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.handmark.pulltorefresh.library.PullToRefreshListView
    android:id="@+id/lv_main_booklist"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    </com.handmark.pulltorefresh.library.PullToRefreshListView>
    
 </LinearLayout>      

MainActivity .java

package com.example.administrator.number2;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
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.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
 private List<Book> data=new ArrayList<>();
 private MyBaseAdapter adapter;
 private PullToRefreshListView lv_main_booklist;//2.获取控件
 int page=1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lv_main_booklist=findViewById(R.id.lv_main_booklist);
    lv_main_booklist.setMode(PullToRefreshBase.Mode.PULL_FROM_END);//3.设置刷新模式
    lv_main_booklist.getLoadingLayoutProxy().setPullLabel("上拉刷新...");//刚下拉时,显示的提
    lv_main_booklist.getLoadingLayoutProxy().setRefreshingLabel("正在载 入...");// 刷新时
    lv_main_booklist.getLoadingLayoutProxy().setReleaseLabel("放开刷 新...");// 下来达到一定距离时,显示的提示


    lv_main_booklist.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
        @Override //4.给该控件添加刷新的监听事件
        public void onRefresh(PullToRefreshBase<ListView> refreshView) {
            new myAsyncTask().execute();//执行异步操作
        }
    });


     this.data=new BookDao().list(page);
     adapter=new MyBaseAdapter((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));
     lv_main_booklist.setAdapter(adapter);

}


//5.自定义适配器(BaseAdapter)提供数据
public class MyBaseAdapter extends BaseAdapter{
    public class ViewHolder{//专门用来保存控件
        ImageView iv_listviewitem_image;
        TextView tv_listviewitem_title;
        TextView tv_listviewitem_author;
        TextView tv_listviewitem_price;
        TextView tv_listviewitem_publishing;
        TextView tv_listviewitem_remark;

    }

    private LayoutInflater inflater;//解析器

    public MyBaseAdapter(LayoutInflater inflater) {
        this.inflater = inflater;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup parent) {
        //被遮挡住的视图  View view

        //1,将项资源解析成可见的视图
        View v=view;
        if(v==null){//增强一 减少视图的创建
            Log.i("test","position:"+i);
            v=inflater.inflate(R.layout.listview_item,null);

            ViewHolder vh=new ViewHolder();//增强二 减少查找控件的时间

            vh.iv_listviewitem_image=v.findViewById(R.id.iv_listviewitem_image);
            vh.tv_listviewitem_title=v.findViewById(R.id.tv_listviewitme_title);
            vh.tv_listviewitem_author=v.findViewById(R.id.tv_listviewitme_author);
            vh.tv_listviewitem_price=v.findViewById(R.id.tv_listviewitme_price);
            vh.tv_listviewitem_publishing=v.findViewById(R.id.tv_listviewitme_publish);
            vh.tv_listviewitem_remark=v.findViewById(R.id.tv_listviewitme_remark);
            
            v.setTag(vh);//保存
        }
        //2,从视图中获取控件(控件无值)  //增强二  减少查找控件的时间(将控件放进ViewHolder类,专门保存控件)
        ViewHolder viewHolder=(ViewHolder)v.getTag();
        // 3,获取当前需要的数据,将值封装进控件中
        Book book=data.get(i);
        viewHolder.iv_listviewitem_image.setImageResource(book.getImage());
        viewHolder.tv_listviewitem_title.setText(book.getTitle());
        viewHolder.tv_listviewitem_author.setText(book.getAuthor());
        viewHolder.tv_listviewitem_price.setText(book.getPrice()+"");
        viewHolder.tv_listviewitem_publishing.setText(book.getPublish());
        viewHolder.tv_listviewitem_remark.setText(book.getRemark());
        //将视图返回
        return v;
    }
}



public class myAsyncTask extends AsyncTask{//6.获取数据(发异步请求)
    @Override
    protected Object doInBackground(Object[] objects) {//6.1请求数据
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        data.addAll(new BookDao().list(page++));
        return null;
    }

    @Override
    protected void onPostExecute(Object o) {//6.2.在异步任务中,去回调,通知展示数据已发生改变.
        super.onPostExecute(o);
        adapter.notifyDataSetChanged();// 通知适配器数据已改变
        lv_main_booklist.onRefreshComplete();// 通知控件数据已经加载完毕

    }


}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值