PullToRefresh

  1. 导入PullToRefresh

1.1 修改library的build.gradle中的sdk版本
//修改前
compileSdkVersion 16
buildToolsVersion “27.0.3”

  defaultConfig {
    minSdkVersion 4
    targetSdkVersion 4
  }
 
  //修改后
  compileSdkVersion 27
  buildToolsVersion "27.0.3"

  defaultConfig {
    minSdkVersion 15
    targetSdkVersion 27
  }

1.2 Clear Project后会报如下错误,修改源代码:“PullToRefreshWebView”
错误: 找不到符号
符号: 方法 floor(float)
位置: 类 FloatMath

  FloatMath.floor -> Math.floor

1.3 选中自己的工程,例如:“app”然后鼠标右键“open Moduel settings”导入库

1.4 修改layout布局文件,添加PullToRefresh控件替换ListView即可

  1. 第三方控件:上拉加载、下拉刷新控件
    2.1 导入第三方插件库
    Android-PullToRefresh-master.zip

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

2.3 自定义适配器(BaseAdapter)提供数据

2.4 异步任务查询数据(AsyncTask)
2.4.1 AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
2.4.2 异步加载数据最少要重写以下这两个方法
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI
–注:此方法中再通知适配器和控件
myBaseAdapter.notifyDataSetChanged();// 通知适配器数据已改变
plv_main_plv1.onRefreshComplete();// 通知控件数据已经加载完毕

2.5 给PullToRefreshListView设置相关属性
plv_main_1.setMode(Mode.BOTH);// 设置刷新模式
Mode.BOTH:同时支持上拉下拉
Mode.PULL_FROM_START:只支持下拉Pulling Down
Mode.PULL_FROM_END:只支持上拉Pulling Up
github、码云
plv_main_1.getLoadingLayoutProxy().setPullLabel("上拉刷新...");// 刚下拉时,显示的提 plv_main_1.getLoadingLayoutProxy().setRefreshingLabel("正在载入...");// 刷新时 plv_main_1.getLoadingLayoutProxy().setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
核心:
1、新建Android的project
2、将第三方工程导入到project中
3、由于现有的开发module的sdk与导入的库的sdk版本不一样,所以需要修改
4、在开发的module中引入库依赖
5、启动module报错的原因,jdk高版本移除了些东西。
6、改变listview为PullToRefreshListView
7、加载数据源 new Mytask / doInBackground
8、给PullToRefreshListView设置相关属性,给下拉组件添加监听
9、回调函数中,通知适配器数据加载完毕 onPostExecute

package com.example.a7;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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.List;

public class MainActivity extends AppCompatActivity {
private PullToRefreshListView lv_main_show;
private int page=1;
private List<Book> data=new BookDao().list(page);
private MyBaseAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv_main_show=findViewById(R.id.lv_main_show);
        adapter=new MyBaseAdapter((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));
        lv_main_show.setAdapter(adapter);
        lv_main_show.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
        lv_main_show.getLoadingLayoutProxy().setPullLabel("上拉刷新...");// 刚下拉时,显示的提
        lv_main_show.getLoadingLayoutProxy().setRefreshingLabel("正在载入...");// 刷新时
        lv_main_show.getLoadingLayoutProxy().setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
        lv_main_show.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                new MyTast().execute();
            }
        });
    }
    class MyTast extends AsyncTask {

        @Override
        protected Object doInBackground(Object[] objects) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            data.addAll(new BookDao().list(++page));
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            adapter.notifyDataSetChanged();// 通知适配器数据已改变
            lv_main_show.onRefreshComplete();// 通知控件数据已经加载完毕
            super.onPostExecute(o);
        }
    }
    class MyBaseAdapter extends BaseAdapter{
    class ViewHolder{
        ImageView iv_listviewitem_image ;
        TextView tv_listviewitme_title;
        TextView tv_listviewitme_author;
        TextView tv_listviewitme_price;
        TextView tv_listviewitme_publish;
        TextView tv_listviewitme_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 convertView, ViewGroup parent) {
            View v=convertView;
            if (v==null){
                v= inflater.inflate(R.layout.listview_item, null);
                ViewHolder viewHolder=new ViewHolder();
                viewHolder.iv_listviewitem_image=v.findViewById(R.id.iv_listviewitem_image);
                viewHolder.tv_listviewitme_title=v.findViewById(R.id.tv_listviewitme_title);
                viewHolder.tv_listviewitme_author=v.findViewById(R.id.tv_listviewitme_author);
                viewHolder.tv_listviewitme_price=v.findViewById(R.id.tv_listviewitme_price);
                viewHolder.tv_listviewitme_publish=v.findViewById(R.id.tv_listviewitme_publish);
                viewHolder.tv_listviewitme_remark=v.findViewById(R.id.tv_listviewitme_remark);
                v.setTag(viewHolder);
            }
            ViewHolder tag = (ViewHolder) v.getTag();
            Book book = data.get(i);
            tag.iv_listviewitem_image.setImageResource(book.getImage());
            tag.tv_listviewitme_title.setText(book.getTitle());
            tag.tv_listviewitme_author.setText(book.getAuthor());
            tag.tv_listviewitme_price.setText(book.getPrice().toString());
            tag.tv_listviewitme_publish.setText(book.getPublish());
            tag.tv_listviewitme_remark.setText(book.getRemark());
            return v;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值