热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动加载更多的listView

packagecom.supermap.testdemo;importandroid.content.Context;importandroid.util.AttributeSet;import
package com.supermap.testdemo;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
* Created by Administrator on 2017/6/9 0009.
*/

public class LoadMoreListView extends ListView implements AbsListView.OnScrollListener {

private LinearLayout footerView;
private int totalCount;
private int lastVisibleCount;
private boolean isLoading = false;
private ILoadMoreListener iLoadMoreListener;

public LoadMoreListView(Context context) {
super(context);
initView(context);
}

public LoadMoreListView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}

public LoadMoreListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}

private void initView(Context context) {
/**
* 设置滚动监听
*/
setOnScrollListener(this);
initFootView(context);
}

private void initFootView(Context context) {
footerView = new LinearLayout(context);
ProgressBar progressBar = new ProgressBar(context);
LinearLayout.LayoutParams progressBarParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
progressBarParams.setMargins(10, 0, 10, 0);
progressBar.setLayoutParams(progressBarParams);
footerView.addView(progressBar);
TextView textView = new TextView(context);
textView.setText("loading");
footerView.addView(textView);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER;
textView.setLayoutParams(layoutParams);
addFooterView(footerView);
}

/**
* 滚动监听
*
* @param view
* @param scrollState
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (totalCount == lastVisibleCount
&& scrollState == SCROLL_STATE_IDLE) {
if (!isLoading) {
footerView.setVisibility(VISIBLE);
isLoading = true;
//加载更多
if (iLoadMoreListener != null) {
iLoadMoreListener.loadMore();
} else {
new Throwable("fuck you!");
}
}
}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.lastVisibleCount = firstVisibleItem + visibleItemCount;
this.totalCount = totalItemCount;
}

public void completeLoadMore() {
isLoading = false;
footerView.setVisibility(GONE);
/**
* 滚动
*/
smoothScrollToPosition(lastVisibleCount);
}

/**
* 加载更多接口回调
*
* @param iLoadMoreListener
*/
public void setLoadMoreListener(ILoadMoreListener iLoadMoreListener) {
this.iLoadMoreListener = iLoadMoreListener;
}

public interface ILoadMoreListener {
void loadMore();
}
}

使用方法:

listView.setLoadMoreListener(new LoadMoreListView.ILoadMoreListener() {
@Override
public void loadMore() {
adapter.addData(getMoreList());
        listView.completeLoadMore();
}});


推荐阅读
  • [java]viewplaincopyprint?ListViewlistViewgetListView(); ... [详细]
  • 【Android开发】 ListView使用实战详解,你get到了嘛?
    【Android开发】ListView使用实战详解,你get到了嘛?-目录一、什么是ListView?二、ListView的简单用法三、ListView点击响应事件hel ... [详细]
  • 现在做了一个ListView,里面的值是用cursor提取数据库的,现在想点击listview以后页面进行跳转,并且在新的activity里显示被点击的listview的数据,我的listview有很 ... [详细]
  • 利用ListView实现新闻客户端的新闻内容图文混排
    如图:布局文件:<LinearLayoutxmlns:android"<ahref"http:schemas.android.comapkresand ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • Flutter ListView如何实现上拉加载更多下拉刷新功能
    这篇文章给大家分享的是有关FlutterListView如何实现上拉加载更多下拉刷新功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小 ... [详细]
  • 这个是listview的item布局,当在list中滚动时,每个item的高度会随机变化,导致显示混乱,多滚动几次高度又显示正常了,怎么回事呢?<?xmlversion1.0 ... [详细]
  • 在WPF中,我有一个绑定到字典(ListView)的InpLangList和一个具有boolean(Ch ... [详细]
  • 我做的那个页面是Android的图文混排,效果如下:我把ScrollView将最外层的LinearLayout包裹之后页面就运行不出来了,而且ListView的数据只能显示一行。。。。查 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • ListView 应用5 - 数据库的增删改查及分页
    郁闷了好长一段时间,做了各种各样的修改,就是“删除”无法执行,罪魁祸首竟然是ListView控件中少设置了一个DataKeyNames属性,悲哀啊!defau ... [详细]
author-avatar
弋弋弋丶妗妗_126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有