`
刘公子家的煮妇
  • 浏览: 15050 次
社区版块
存档分类
最新评论

GridView分页加载--给GridView加FooterView

阅读更多

在项目开发中发现gridview不像listview一样可以加个footerview来显示加载状态。为达到像listview一样的加载效果,可以给gridview伪造一个footerview.核心思想是在绑定的list末加个null值,在getview的时候判断当前adapter是否要加footerview.

 

1、初始化GridView.在GridView滑到底时加载数据

	private void initGridView() {
		adapter = new ItemAdapter(MainActivity.this, list);
		adapter.setOnFooterViewClickListener(MainActivity.this);
		gridview.setAdapter(adapter);
		gridview.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {

				if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
					if (view.getLastVisiblePosition() == (view.getCount() - 1)
							&& !isLoadFinished
							&& adapter.getFooterView().getStatus() != FooterView.LOADING) {
						loadMoreData();

					}
				}

			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {

			}
		});
	}

 2、分页加载完数据处理

	@Override
	public void onCompletedSucceed(List<String> l) {

		// 在添加数据之前删除最后的伪造item
		if (adapter.isFooterViewEnable()) {
			list.remove(list.get(list.size() - 1));
		}

		// 分页加载
		if (l.size() < PAGE_SIZE || list.size() + l.size() == COUNT) {
			// 如果加载出来的数目小于指定条数,可视为已全部加载完成
			isLoadFinished = true;
			list.addAll(l);
			adapter.setFootreViewEnable(false);
			adapter.notifyDataSetChanged();
		} else {
			// 还有数据可加载。
			list.addAll(l);
			// 伪造一个空项来构造一个footerview;
			list.add(null);
			adapter.setFootreViewEnable(true);
			adapter.notifyDataSetChanged();
		}

	}

 3、adapter中的处理

 

public class ItemAdapter extends BaseAdapter {

	private List<String> mList = new ArrayList<String>();
	private Context mContext;

	private FooterView footerView;

	private boolean footerViewEnable = false; 
	private OnClickListener ml;

	public ItemAdapter(Context context, List<String> list) {
		if (list != null) {
			this.mList = list;
		}
		this.mContext = context;

	}

	public boolean isFooterViewEnable() {
		return footerViewEnable;
	}

	/**
	 * 存放列表项控件句柄
	 */
	public static class ViewHolder {

		public TextView itemview;

	}

	public void setFootreViewEnable(boolean enable) {
		footerViewEnable = enable;
	}

	public void setOnFooterViewClickListener(OnClickListener l) {
		ml = l;
	}

	private int getDisplayWidth(Activity activity) {
		Display display = activity.getWindowManager().getDefaultDisplay();
		int width = display.getWidth();
		return width;
	}

	@Override
	public View getView(final int i, View convertView, ViewGroup parent) {
		// footerViewEnable 判断当前是否要加footerview
		if (footerViewEnable && i == mList.size() - 1) {
			if (footerView == null) {
				footerView = new FooterView(parent.getContext());
				// 若 gridview是多列的,footerview的宽度要设置成固定数值,不能是fill_parent
				GridView.LayoutParams pl = new GridView.LayoutParams(
						getDisplayWidth((Activity) mContext),
						LayoutParams.WRAP_CONTENT);
				footerView.setLayoutParams(pl);
				footerView.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						if (ml != null) {
							ml.onClick(v);
						}

					}
				});
			}
			setFooterViewStatus(FooterView.MORE);
			return footerView;
		}

		final ViewHolder holder;
		// 当convertView是footerView时要重新加载view.
		if (convertView == null
				|| (convertView != null && convertView == footerView)) {

			convertView = LayoutInflater.from(mContext).inflate(
					R.layout.textview, parent, false);
			holder = new ViewHolder();
			holder.itemview = (TextView) convertView
					.findViewById(R.id.textview);

			convertView.setTag(holder);

		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		holder.itemview.setText("item" + mList.get(i));
		return convertView;
	}

	public FooterView getFooterView() {
		return footerView;
	}

	public void setFooterViewStatus(int status) {
		if (footerView != null) {
			footerView.setStatus(status);
		}
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mList.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

}

 完整demo地址:https://github.com/hyhe/gridview-with-footerview.git

分享到:
评论

相关推荐

    GridView系列---GridView分页

    在“GridView系列---GridView分页”这个主题中,我们将深入探讨如何利用GridView实现数据的分页显示,提升用户体验并优化服务器性能。 一、GridView概述 GridView控件允许开发人员以网格形式展示数据,支持多种内置...

    Android gridview分页效果-IT计算机-毕业设计.zip

    在这个“Android gridview分页效果”的项目中,我们将会探讨如何在Android应用程序中实现GridView的分页功能,这对于处理大量数据时提升用户体验至关重要。 首先,GridView的基本用法是通过在XML布局文件中定义一个...

    android Gridview分页实现

    本篇文章将详细讲解如何在Android中利用GridView实现分页加载功能。 首先,理解GridView的基本概念。GridView是ListView的一种变体,它按照指定的列数来排列子视图。默认情况下,GridView会一次性加载所有数据,这...

    Android应用源码之gridview分页效果-IT计算机-毕业设计.zip

    在这个“Android应用源码之gridview分页效果”的项目中,我们可以深入理解如何在Android应用中实现GridView的分页功能,这对于处理大量数据时提高用户体验至关重要。 首先,我们需要了解GridView的基本用法。...

    GridView系列---GridView固定表头

    在数据量较大或者需要分页显示时,GridView配合Adapter能够高效地处理数据。本篇文章将深入探讨“GridView系列---GridView固定表头”的知识点,帮助开发者实现更优秀的UI设计。 一、GridView基本概念 1. GridView是...

    安卓Andriod源码——gridview分页效果.zip

    "安卓Andriod源码——gridview分页效果.zip"这个压缩包可能包含了一个示例项目,演示了如何在GridView中实现分页效果。以下是对这个主题的详细讲解: 1. GridView基本概念: GridView继承自AbsListView,它会将...

    GridView分页整套精美样式

    4. `.gridview-first`、`.gridview-last`、`.gridview-prev`、`.gridview-next`:分别对应“首页”、“末页”、“上一页”和“下一页”的按钮,可以为其设定特殊的图标或样式。 例如,以下是一个简单的CSS代码示例...

    安卓gridview相关相关-分页的GridView.rar

    首先,实现GridView分页需要一个适配器(Adapter),它是连接数据源和视图的桥梁。你可以创建一个自定义的BaseAdapter,重写`getCount()`方法来返回当前页的数据条目数量,以及`getItem(int position)`方法来获取...

    安卓gridview相关相关-GridView-带标题栏的-TV-控件.rar

    本资源“安卓gridview相关相关-GridView-带标题栏的-TV-控件.rar”似乎包含了一个带有标题栏的GridView实现,可能包含了自定义适配器和视图的示例。下面将详细讲解GridView的基本概念、用法以及如何添加标题栏。 1....

    GridView-Item-Rotate

    这个"GridView-Item-Rotate"项目是关于如何在GridView的每个Item(单元格)上实现卡牌翻转效果的一个实例。这样的效果可以增加用户交互性和应用的趣味性,常见于各种应用的卡片式设计中,如社交应用、游戏或者信息...

    GridView系列---GridView合并表头

    GridView提供了丰富的功能,包括排序、分页、筛选和编辑等。 2. GridView表头合并的重要性: 在展示复杂数据时,合并表头可以清晰地表示层次关系,使得用户更容易理解数据结构。例如,当有多个列属于同一类别时,...

    安卓gridview相关相关-自定义的各种风格gridview刷新加载横向各式各样.rar

    这个压缩包“安卓gridview相关相关-自定义的各种风格gridview刷新加载横向各式各样.rar”包含了各种自定义风格的GridView实现,包括刷新和加载功能,以及横向滚动的效果。下面将详细介绍这些知识点。 1. GridView的...

    Android GridView分页显示

    通过以上步骤,我们就能实现一个高效的分页加载功能,使GridView在显示大量数据时保持流畅。在实际开发中,还可以根据需求进一步优化,比如使用DiffUtil进行数据对比,减少不必要的刷新,或者采用PagedListAdapter等...

    GridView的左右滑动+分页

    在标题"GridView的左右滑动+分页"中,提到的功能是为GridView添加左右滑动以及分页加载数据,这在处理大量数据时非常有用,既能提供良好的用户体验,又能优化性能。 首先,让我们详细讲解如何实现GridView的左右...

    Python库 | gridview-0.1.5-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:gridview-0.1.5-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    安卓gridview相关相关-HorizontalGridView可收缩分页ViewPagerGridView.zip

    【标题】"安卓gridview相关相关-HorizontalGridView可收缩分页ViewPager GridView.zip" 提供了关于Android开发中使用GridView的一些高级特性的实现,主要聚焦在HorizontalGridView、分页以及ViewPager的集成。...

    gridview分页效果

    "gridview分页效果"是Android开发中的一个重要知识点,主要涉及到如何在GridView中实现数据的分页加载,以提高用户体验并优化性能。 首先,我们需要理解GridView的工作原理。GridView继承自AbsListView,它会根据其...

    gridview导出PDF-WORLD-EXCEL

    GridView提供了丰富的功能,如排序、分页、筛选等,同时也支持数据导出,这在数据分析和报告生成中非常实用。本项目"gridview导出PDF-WORLD-EXCEL"显然关注的是如何将GridView中的数据导出为PDF、Word(可能是...

    GridView分页控件(项目例子)

    这个“GridView分页控件(项目例子)”应该是提供了使用纯.NET Framework 2.0实现的GridView分页功能的一个实例项目。在.NET 2.0时代,GridView控件就已经内置了基本的分页功能,无需依赖第三方控件就能实现数据的...

Global site tag (gtag.js) - Google Analytics