listView控件刷新、加载更多
2015-07-07 15:45
405 查看
https://github.com/LuckyJayce/ListViewHelper
MVCHelper 替代该类库可以任意view使用该mvc架构,可以自由选择主流的下拉刷新框架,地址:https://github.com/LuckyJayce/MVCHelper
ListViewHelper
ListViewHelper. 实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,,真正的MVC架构.
1.Model
(IDataSource) 负责获取数据
[code] //数据源 public interface IDataSource<DATA> { // 获取刷新的数据 public DATA refresh() throws Exception; // 获取加载更多的数据 public DATA loadMore() throws Exception; // 是否还可以继续加载更多 public boolean hasMore(); }
例如:分页加载书籍列表数据
[code]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)负责显示数据
[code]public interface IDataAdapter<DATA> extends ListAdapter { public abstract void setData(DATA data, boolean isRefresh); public abstract DATA getData(); public void notifyDataSetChanged(); }
例如:分页显示书籍列表数据
[code]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负责调度,代码如下[code]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
使用者可以根据需求换成其他下拉刷新类库
相关文章推荐
- GIT有时候.gitignore不起作用的问题
- 【转载】Android 内存溢出如何发生的。
- 黑马程序员——Java基础——模板方法模式、多态
- 多线程中synchronized作用
- webview加载本地网页乱码问题
- 【转载】Shell编程基础
- MySQL优化之——日志
- 简述sqlldr的使用
- 为什么有些人用一年时间获得了你十年的工作经验?
- CentOS安装KDE
- 检测浏览器版本js脚本
- myeclipse代码中出现 The word 'carousel' is not correctly spelled
- UIScrollView现实循环滚动
- java.lang.RuntimeException: No application id has been found.
- 堆排序(Java实现)
- spoj LIS2
- php网上商城购物车设计代码分享
- spark官方文档之——Spark Streaming Programming Guid spark streaming编程指南
- linux监控nmon和analyser的使用
- Android train——基本组件LinearLayout、EditText、Button