自定义listview的上拉加载更多

private ListView lv;

// 适配器数据集合

private List<String> list = new ArrayList<String>();

// 适配器

private ArrayAdapter<String> adapter;

// 判断是否到达低端

private boolean isBottom;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);

initData();

// 创建适配器对象

adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_1, list);

// 设置适配器

lv.setAdapter(adapter);

lv.setOnScrollListener(new OnScrollListener() {

// view:ListView

// scrollState有3种状态:停止SCROLL_STATE_IDLE

// 触摸滚动:SCROLL_STATE_TOUCH_SCROLL 快速滑动:SCROLL_STATE_FLING

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

// TODO Auto-generated method stub

switch (scrollState) {

// 快速滑动

case SCROLL_STATE_FLING:

Log.i("onScrollStateChanged", "快速滑动");

break;

// 停止

case SCROLL_STATE_IDLE:

Log.i("onScrollStateChanged", "没有滑动");

if (isBottom) {

// 加载下页数据

MyAsyncTask task = new MyAsyncTask();

task.execute();

// 改变

isBottom = false;

}

break;

// 触摸滚动

case SCROLL_STATE_TOUCH_SCROLL:

Log.i("onScrollStateChanged", "触摸滑动");

break;

}

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

// TODO Auto-generated method stub

Log.i("onScroll", "firstVisibleItem----->" + firstVisibleItem);

Log.i("onScroll", "visibleItemCount----->" + visibleItemCount);

Log.i("onScroll", "totalItemCount----->" + totalItemCount);

// 判断如果第一个可见的Item项的索引值+页面的Item的数量==本次加载的Item的总数量 ---》 则到达低端

if (firstVisibleItem + visibleItemCount == totalItemCount) {

isBottom = true;

}

}

});

}

// 初始化数据

private void initData() {

for (int i = 0; i < 20; i++) {

list.add("白菜价U盘" + i);

}

}

// 开启异步任务加载新的数据

public class MyAsyncTask extends AsyncTask<Void, Void, List<String>> {

private ProgressDialog dialog;

// 初始化进度框

@Override

protected void onPreExecute() {

// TODO Auto-generated method stub

super.onPreExecute();

dialog = new ProgressDialog(MainActivity.this);

dialog.setMessage("请稍后...");

dialog.show();

}

// 模拟后台加载数据

@Override

protected List<String> doInBackground(Void... params) {

List<String> list = new ArrayList<String>();

for (int i = 0; i < 20; i++) {

list.add("大白菜甩卖" + i);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 返回新加载的数据

return list;

}

// 拿到数据更新适配器

@Override

protected void onPostExecute(List<String> result) {

// TODO Auto-generated method stub

super.onPostExecute(result);

// 对话框消失

dialog.dismiss();

// 判断

if (result != null) {

// 将数据添加到适配器的集合中

list.addAll(result);

}

adapter.notifyDataSetChanged();

}

}

时间: 2024-08-08 07:39:38

自定义listview的上拉加载更多的相关文章

Android中自定义ListView实现上拉加载更多和下拉刷新

ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,GitHub上有一些开源库可以使用,但是本着学习的精神,我做的是使用自定义ListView实现这个功能. 思路:谷歌提供的ListView是不能提供下拉刷新和下拉加载的,所以我们就需要重写ListView.在ListView的头部和尾部加上我们的布局文件(progressbar). 先说上拉加载更多实现

Android中ListView上拉加载更多及下拉刷新

做几乎每一个Android应用开发,都少不了用到一个控件,那就是ListView,用于加载多条数据,并用一定的样式展示出来.但是为了性能问题(一次性加载太多数据,比如100000条,耗费时间长,消耗资源多等)及用户体验问题(比如用户只想看最新的10条数据,结果一下子把所有的上万条数据都加载了,不方便用户选择)等原因,所以我们要把ListView的数据进行分页加载,常用的就是ListView的上拉加载更多及下拉刷新最新数据. 我们可以自己封装一个带上下拉功能的ListView,通常就是加上头部He

Android上拉加载更多ListView——PulmListView

思路 今天带大家实现一个上拉加载更多的ListView.GitHub传送门:PulmListView, 欢迎大家fork&&star. 先带大家理一下思路, 如果我们要实现一个上拉加载更多的ListView, 我们需要实现的功能包括: 一个自定义的ListView, 并且该ListView能够判断当前是否已经处于最底部. 一个自定义的FooterView, 用于在ListView加载更多的过程中进行UI展示. 关联FooterView和ListView, 包括加载时机判断.FooterVi

react-native ListView 封装 实现 下拉刷新/上拉加载更多

1.PageListView 组件封装 src/components/PageListView/index.js /** * 上拉刷新/下拉加载更多 组件 */ import React, { Component } from 'react'; import { Text, View, ListView, FlatList, Dimensions, PanResponder, Animated, Easing, ActivityIndicator, } from 'react-native';

android 安卓 listview 支持下拉刷新 上拉加载更多

[1]重写listView import java.text.SimpleDateFormat; import java.util.Date; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGrou

android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等. 下载地址:https://github.com/chrisbanes/Android-PullToRefresh 首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述. 下面是个例子采用的是ListView,当然其余的和这

robotium listview上拉加载更多/下拉刷新

ListView listview = (ListView) solo.getView("id/list"); int[] location = new int[2]; listview.getLocationOnScreen(location); location[1] = location[1] + listview.getBottom(); Log.i(TAG, "[Location x]: " + Integer.toString(location[0]))

Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷新和上拉加载更多.这个组件有个mode的属性,可以设置为both,即上下同时都可拉动.但是只设置这个属性的话,上拉与下拉产生的效果是完全一致的.所以要使用这个开源项目做到下拉刷新并同时可上拉加载更多,就需要在代码中进行一些处理. ==========================pulltoref

Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)

支持上拉加载更多的控件有很多,但是你知道背后的原理吗?有一些面试官可能会问到这方便的知识,他们认为会用不是目的,懂背后的原理才是真人才.下面我们通过实现OnScrollListener接口实现上拉加载更多的效果,这里用到了回调接口,你需要对回调进行比较好的理解,回调机制是Android中很重要的机制,下面我们看一下代码: 1.定义一个footer.xml,用于下拉提示的效果: <?xml version="1.0" encoding="utf-8"?>