安卓学习笔记—LisetView的下拉刷新

本文介绍了一种在Android中实现ListView下拉刷新的方法。通过在ListView底部添加加载提示,在特定条件下触发数据加载,并使用子线程更新数据集,最后通知ListView更新显示。此方法能够有效提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LisetView下拉刷新实现思路:

1.在第一次给ListView设置适配器之前添加脚,之后移除脚,并加载第一次要显示的数据

adapter = new MyAdapter(total);

//脚
view = View.inflate(MainActivity.this,
R.layout.progress_before, null);
lv_page.addFooterView(view);
lv_page.setAdapter(adapter);
lv_page.removeFooterView(view);

2. a.监听lv的滚动状态(setOnScrollListener),

重写onScrollStateChanged方法,重写lv空闲时(OnScrollListener.SCROLL_STATE_IDLE)的事件

    b.符合下列条件时进行更新加载:

当前处于没有加载的状态;

lv的最后一个条目的位置等于当前适配器条目个数-1;

lv的最后一个条目的位置不等于所需加载的全部条目-1;

    c.加载数据通知主线程并更新lv

变更更新状态,加入脚

      d.更新完成后,移除脚,变更更新状态

部分代码如下:

lv_page.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				switch (scrollState) {
				case OnScrollListener.SCROLL_STATE_IDLE:
					Log.i("test", "滑动闲置监听了");
					if (!isLoding
							&& lv_page.getLastVisiblePosition() == adapter
									.getLists().size() - 1
							&& lv_page.getLastVisiblePosition() != totals
									.size() - 1) {
						lv_page.addFooterView(view);
						lv_page.setSelection(adapter.getCount());
						isLoding = true;
						Log.i("test", "准备进入子线程更新集合");
						new Thread() {
							public void run() {
								try {
									Thread.sleep(2000);
								} catch (InterruptedException e) {

									e.printStackTrace();
								}
								Log.i("test", "滑动闲置进入线了程");
								List<ListView1> lists = adapter.getLists();
								List<ListView1> showRefresh = showRefresh(
										totals, adapter.getLists().size(),
										count);
								lists.addAll(showRefresh);
								handler.obtainMessage(RE_SUCCESS)
										.sendToTarget();
								Log.i("test", "lists" + lists);
								Log.i("test", "滑动闲置结束线了程");
							};
						}.start();
						;
					}

					break;
				case OnScrollListener.SCROLL_STATE_FLING:
					Log.i("test", "重重滑动监听了监听了");
					break;
				case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
					Log.i("test", "轻轻滑动监听了");
					break;
				default:
					break;
				}

			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub

			}
		});
更新完成后

// 之后更新集合数据
			case RE_SUCCESS:
				Log.i("test", "主线程接收到了更新消息");
				adapter.notifyDataSetChanged();
<pre name="code" class="java"><span style="white-space:pre">				</span>// 更改标记,并移除脚
isLoding = false;lv_page.removeFooterView(view);Log.i("test", "adapter提醒更新了");break;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值