listView控件刷新、加载更多

原创 2015年07月07日 15:45:33


https://github.com/LuckyJayce/ListViewHelper

MVCHelper 替代该类库可以任意view使用该mvc架构,可以自由选择主流的下拉刷新框架,地址:https://github.com/LuckyJayce/MVCHelper

ListViewHelper

ListViewHelper. 实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,,真正的MVC架构.

1.Model (IDataSource) 负责获取数据

    //数据源
public interface IDataSource<DATA> {
    // 获取刷新的数据
    public DATA refresh() throws Exception;

    // 获取加载更多的数据
    public DATA loadMore() throws Exception;

    // 是否还可以继续加载更多
    public boolean hasMore();
}

例如:分页加载书籍列表数据

public class BooksDataSource implements IDataSource<List<Book>> {
    private int page = 1;
    private int maxPage = 5;

    @Override
    public List<Book> refresh() throws Exception {
        return loadBooks(1);
    }

    @Override
    public List<Book> loadMore() throws Exception {
        return loadBooks(page + 1);
    }

    private List<Book> loadBooks(int page) {
        List<Book> books = new ArrayList<Book>();
        for (int i = 0; i < 20; i++) {
            books.add(new Book("page" + page + "  Java编程思想 " + i, 108.00d));
        }
        this.page = page;
        return books;
    }

    @Override
    public boolean hasMore() {
        return page < maxPage;
    }

}

2.View(IDataAdapter)负责显示数据

public interface IDataAdapter<DATA> extends ListAdapter {

    public abstract void setData(DATA data, boolean isRefresh);

    public abstract DATA getData();

    public void notifyDataSetChanged();
}

例如:分页显示书籍列表数据

public class BooksAdapter extends BaseAdapter implements IDataAdapter<List<Book>> {
    private List<Book> books = new ArrayList<Book>();
    private LayoutInflater inflater;

    public BooksAdapter(Context context) {
        super();
        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_book, parent, false);
        }
        TextView textView = (TextView) convertView;
        textView.setText(books.get(position).getName());
        return convertView;
    }

    @Override
    public void setData(List<Book> data, boolean isRefresh) {
        if (isRefresh) {
            books.clear();
        }
        books.addAll(data);
    }

    @Override
    public int getCount() {
        return books.size();
    }

    @Override
    public List<Book> getData() {
        return books;
    }


    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }


}

3.Controller (Activity,Fragment,ListViewHelper) 负责调度显示和调度获取数据

Activity负责调度,代码如下

public class MainActivity extends Activity {

    private ListViewHelper<List<Book>> listViewHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置LoadView的factory,用于创建用户自定义的加载失败,加载中,加载更多等布局
        // ListViewHelper.setLoadViewFractory(new LoadViewFractory());

        listViewHelper = new ListViewHelper<List<Book>>(this, R.layout.pulltofrefreshlistview);
        setContentView(listViewHelper.getPullToRefreshAdapterViewBase());

        // 设置数据源
        listViewHelper.setDataSource(new BooksDataSource());
        // 设置适配器
        listViewHelper.setAdapter(new BooksAdapter(this));

        // 加载数据
        listViewHelper.refresh();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 释放资源
        listViewHelper.destory();
    }
}

只要写了上述几行代码,恭喜你,你已经实现了分页加载显示书籍列表,实现下拉刷新,滚动底部自动加载更多,在网络请求失败的时候自动显示网络失败,没有数据时显示无数据布局,加载成功时显示书籍列表

4.ILoadViewFractory 自定义 失败布局,无数据布局,加载中布局

实现ILoadViewFractory
然后ListViewHelper.setLoadViewFractory(new LoadViewFractory());
就这样,就会显示你自定义的布局

5.说明

本项目使用了Android-PullToRefresh-Library第三方下拉刷新类库
地址https://github.com/chrisbanes/Android-PullToRefresh
使用者可以根据需求换成其他下拉刷新类库

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android ListView 下拉刷新,上拉加载更多,带动画 自定义控件

之前每次 项目中用到ListView 的 下拉刷新 以及上拉分页加载 都是 用的 网上 下载 的 类库, 使用起来 诸多不便 ,于是 趁着有空 ,自己封装了ListView 让其 实现 下拉刷新,以...

Android自定义控件(一) 下拉刷新,上拉分页加载更多(支持ListView, GridView, ScrollView)

项目中用到了下拉刷新和上啦加载

Android自定义控件(二) 下拉刷新,上拉分页加载更多(支持ListView, GridView, ScrollView)

接着上一篇,进行代码分析,先贴上 :

自定义控件之ListView下拉刷新,上拉加载更多

1、RefleshListView.java package com.example.refleshlistviewdemo; import android.content.Context; im...

PullRefresh(自定义控件,ListView,下拉刷新,加载更多)

PullRefreshgithub地址效果展示Usage一.layout

Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView

文章出处:http://miloisbadboy.com/archives/55 麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实...
  • zhou699
  • zhou699
  • 2012年08月01日 08:49
  • 5660

Android 下拉刷新,上拉加载更多控件--支持ListView,GridView和ScrollView

Android 下拉刷新,上拉加载更多控件--支持ListView,GridView和ScrollView 由于这个文章比较长点,这里简单贴点代码,详细说明还是看原文吧     ...

Android下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView

http://miloisbadboy.com/archives/55 项目地址:http://pan.baidu.com/share/link?shareid=398791&uk=17962162...

Android下拉刷新上拉加载更多ListView控件

改写ListView,支持上拉和下拉操作,并有效防止刷新的时候触发加载更多,防止加载更多的时候触发刷新。 下面是关键代码: public class XListView extends ListV...
  • thini
  • thini
  • 2013年07月31日 15:57
  • 1383
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:listView控件刷新、加载更多
举报原因:
原因补充:

(最多只允许输入30个字)