`

滚动到底部加载更多及下拉刷新listview的使用

阅读更多

最新内容建议直接访问原文:滚动到底部加载更多及下拉刷新listview的使用

 

本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用。

 

该ListView优点包括:a. 可自定义下拉响应事件(如下拉刷新)  b.可自定义滚动到底部响应的事件(如滑动到底部加载更多)  c.可自定义丰富的样式  d.高效(若下拉样式关闭不会加载其布局,同listView效率一致) e. 丰富的设置。

 

本文可运行APK地址可见TrineaAndroidDemo.apk,可运行代码地址可见DropDownListViewDemo,效果图如下:

drop Down To Refresh Load More ListView

 

1、引入公共库

引入TrineaAndroidCommon@Github(欢迎star和fork^_^)作为你项目的library(如何拉取代码及添加公共库),或是自己抽取其中的DropDownListView@Github部分使用。

 

2、在layout中定义
将布局中的ListView标签换成cn.trinea.android.common.view.DropDownListView标签
并加上自定义属性的命名空间xmlns:listViewAttr=”http://schemas.android.com/apk/res/cn.trinea.android.demo”,其中cn.trinea.android.demo需要用自己的包名替换。如何自定义属性及其命名空间可见本文最后。xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:listViewAttr="http://schemas.android.com/apk/res/cn.trinea.android.demo"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <cn.trinea.android.common.view.DropDownListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:paddingBottom="@dimen/dp_40"
        listViewAttr:isDropDownStyle="true"
        listViewAttr:isOnBottomStyle="true"
        listViewAttr:isAutoLoadOnBottom="true" />

</RelativeLayout>

 

DropDownListView自定义了三个boolean属性

<declare-styleable name="drop_down_list_attr"> 
<attr name="isDropDownStyle" format="boolean" /> 
<attr name="isOnBottomStyle" format="boolean" /> 
<attr name="isAutoLoadOnBottom" format="boolean" /> 
</declare-styleable> 

 

isDropDownStyle表示是否允许下拉样式,java代码中可自定义下拉listener,表示需要完成的任务

isOnBottomStyle表示是否允许底部样式,java代码中可自定义滚动到底部的listener,表示需要完成的任务
isAutoLoadOnBottom表示是否允许滚动到底部时自动执行对应listener,仅在isOnBottomStyle为true时有效

PS:如果isDropDownStyle或isOnBottomStyle为false,并不会加载对应的布局,所以性能同ListView一样。

 

3、在Java类中调用
通过setOnDropDownListener设置下拉的事件,不过需要在事件结束时手动调用onDropDownComplete恢复状态(注意需要在adapter.notifyDataSetChanged();后面调用)
通过setOnBottomListener设置滚动到底部的事件,不过需要在事件结束时手动调用onBottomComplete恢复状态,示例代码如下:

/**
 * DropDownListViewDemo
 * 
 * @author Trinea 2013-6-1
 */
public class DropDownListViewDemo extends BaseActivity {

    private LinkedList<String>   listItems = null;
    private DropDownListView     listView  = null;
    private ArrayAdapter<String> adapter;

    private String[]             mStrings  = { "Aaaaaa", "Bbbbbb", "Cccccc", "Dddddd", "Eeeeee",
            "Ffffff", "Gggggg", "Hhhhhh", "Iiiiii", "Jjjjjj", "Kkkkkk", "Llllll", "Mmmmmm",
            "Nnnnnn",                     };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, R.layout.drop_down_listview_demo);

        listView = (DropDownListView)findViewById(R.id.list_view);
        // set drop down listener
        listView.setOnDropDownListener(new OnDropDownListener() {

            @Override
            public void onDropDown() {
                new GetDataTask(true).execute();
            }
        });

        // set on bottom listener
        listView.setOnBottomListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new GetDataTask(false).execute();
            }
        });

        listItems = new LinkedList<String>();
        listItems.addAll(Arrays.asList(mStrings));
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
        listView.setAdapter(adapter);
    }

    private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        private boolean isDropDown;

        public GetDataTask(boolean isDropDown){
            this.isDropDown = isDropDown;
        }

        @Override
        protected String[] doInBackground(Void... params) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                ;
            }
            return mStrings;
        }

        @Override
        protected void onPostExecute(String[] result) {

            if (isDropDown) {
                listItems.addFirst("Added after drop down");
                adapter.notifyDataSetChanged();

                // should call onDropDownComplete function of DropDownListView at end of drop down complete.
                SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");
                listView.onDropDownComplete(getString(R.string.update_at)
                                            + dateFormat.format(new Date()));
            } else {
                listItems.add("Added after on bottom");
                adapter.notifyDataSetChanged();

                // should call onBottomComplete function of DropDownListView at end of on bottom complete.
                listView.onBottomComplete();
            }

            super.onPostExecute(result);
        }
    }
}



4、高级接口设置
5、样式设置(自定义header和footer信息)
见原文:滚动到底部加载更多及下拉刷新listview的使用

www.trinea.cn

 

分享到:
评论

相关推荐

    自定义listview下拉刷新上拉加载更多以及与google官方的下拉刷新结合使用

    在滑动到底部时,使用类似自定义下拉刷新的逻辑触发加载更多操作。 总的来说,自定义ListView下拉刷新和上拉加载更多虽然涉及到一些复杂的交互逻辑,但通过合理的设计和第三方库,可以大大简化开发过程。在实际项目...

    listView下拉刷新,到底部自动加载更多

    总结起来,"ListView下拉刷新,到底部自动加载更多"是Android应用中常见的功能实现,涉及到SwipeRefreshLayout的使用、ListView的滚动监听、分页加载策略以及异步数据加载等多个知识点,是提升用户交互体验的重要...

    自定义ListView实现下拉刷新+加载更多功能Demo

    在Android开发中,自定义ListView实现下拉刷新和加载更多的功能是常见的需求,尤其是在构建具有数据流滚动和实时更新的应用程序时。这个"自定义ListView实现下拉刷新+加载更多功能Demo"旨在帮助开发者理解如何集成...

    ListView 下拉刷新 加载更多

    1. **基本概念**:加载更多是指当用户滚动到底部时,自动加载更多的数据到ListView中。这种设计在内容无限滚动的应用中尤为适用。 2. **实现方式**: - **OnScrollListener**:通过给ListView添加一个...

    ListView下拉刷新/上拉更多

    当用户滚动到ListView的底部时,系统会自动加载更多的数据,通常是通过添加更多项到ListView的末尾来实现。这种方式适用于分页加载数据的情况,如电商应用的商品列表。 实现这两个功能,我们可以自定义一个继承自...

    Android listview 下拉刷新和下拉刷新及加载更多

    然而,随着用户交互体验的提升,单纯的ListView已经不能满足需求,下拉刷新和上拉加载更多的功能应运而生。这两个特性使得用户可以动态地更新列表数据,提升用户体验。 一、下拉刷新(Pull-to-Refresh) 下拉刷新...

    android Listview下拉刷新 上拉(滑动分页)加载更多

    这些功能使得用户可以在滚动到列表顶部时更新数据(下拉刷新),或者在滚动到底部时加载更多数据(上拉加载更多)。这种设计常见于许多社交媒体应用,如微博。 实现这个功能,我们可以利用开源库,比如...

    Android 实现ListView滚动到底部自动加载数据

    当用户滚动到ListView的底部时,自动加载更多数据的功能通常被称为“无限滚动”或“下拉加载更多”。这种功能可以提升用户体验,避免用户手动翻页。下面我们将详细讨论如何在Android中实现这个功能。 首先,你需要...

    android上拉加载,下拉刷新listview

    接下来是上拉加载(Load More),它允许用户在滚动到ListView底部时加载更多数据。实现这一功能通常需要自定义适配器(Adapter)和监听ListView的滚动事件。我们可以监听AbsListView的OnScrollListener,当用户滚动...

    QT-QML下拉刷新上拉加载更多(仿京东app)

    本文将深入探讨如何使用QML实现类似京东APP的下拉刷新和上拉加载更多的功能。 首先,我们要了解`ListView`是QML中的核心组件之一,它允许我们创建可滚动列表,展示大量数据。在实现下拉刷新和上拉加载功能时,`...

    下拉刷新及加载更多没有使用LISTVIEW来做

    在Android开发中,"下拉刷新"和"加载更多"是常见的列表滚动交互功能,用于更新数据或加载更多内容。通常,ListView是实现这些功能的传统选择,但由于ListView自身的一些限制和问题,开发者可能会选择其他解决方案。...

    Android 自绘listview 上拉加载更多,下拉刷新

    上拉加载更多是在用户滚动到ListView底部时,自动加载更多的数据,而下拉刷新则是用户在顶部拉动ListView时,刷新当前显示的数据。 要实现自绘ListView,我们需要继承自ListView并重写其关键方法。自绘主要涉及`...

    Android ListView 下拉刷新、上拉加载

    当用户滚动到底部时,加载更多数据。首先,我们需要定义一个变量记录是否正在加载更多数据,然后在滚动监听器中判断: ```java ListView listView = findViewById(R.id.list_view); listView.setOnScrollListener...

    自定义listView下拉刷新上拉加载更多

    然而,为了提供更好的用户体验,开发者经常需要为ListView添加下拉刷新和上拉加载更多的功能。本文将详细讲解如何实现自定义的ListView,以实现这两种功能。 首先,我们来看标题中的"自定义listView下拉刷新"。下拉...

    自定义listview下拉刷新上拉加载更多以及google官方的下拉刷新

    2. 上拉加载更多:上拉加载更多是在用户滚动到ListView底部时加载更多数据的功能。实现过程类似,但监听的是底部触达事件: - 添加一个可滚动的底部视图,包含加载提示文本。 - 在OnScrollListener中检查是否到达...

    上拉加载更多,下拉刷新的ListView

    2. 检测底部:监听ListView的滚动事件,当用户滚动到列表底部时,触发加载更多数据的逻辑。 3. 加载数据:在加载更多数据的方法中,向服务器请求新的数据,并在回调中将新数据添加到Adapter中。 4. 更新UI:数据...

    ListView滚动到底部自动加载剩余数据

    当用户滚动到ListView的底部时,自动加载更多的数据功能通常被称为“无限滚动”或“下拉加载更多”。这个特性提高了用户体验,避免了用户手动刷新或点击加载按钮来获取新数据的不便。下面将详细解释如何实现ListView...

    效果不错的listview(带下拉刷新和加载更多,条目滚动带动画

    在给定的标题和描述中,我们关注的是一个优化过的ListView,它包含了几个关键特性:下拉刷新、上拉加载更多以及条目滚动时的动画效果。这些特性极大地提升了用户体验,使得用户在浏览长列表时更加流畅和便捷。 首先...

    listview上拉加载下拉刷新demo

    上拉加载更多是指当用户滚动到ListView的底部时,自动加载并显示更多的数据。这个功能通常用在需要无限滚动或者分页加载的场景中。实现上拉加载更多,一般分为以下步骤: 1. 监听ListView的滚动事件:通过`...

    Android下拉刷新ListView

    当用户滚动到底部时,触发加载更多数据的逻辑。这通常通过监听ListView的滚动状态和当前位置来实现。一旦检测到用户已经滚动到列表的最后,就调用加载更多数据的接口。 4. **分页加载**: 分页加载是优化大数据量...

Global site tag (gtag.js) - Google Analytics