文档章节

GridView 动态添加数据

qii
 qii
发布于 2014/05/02 14:24
字数 539
阅读 6819
收藏 4
点赞 0
评论 2

我有一个列表页,是采用GridView来实现的,初始数据是10个。当用户滑动到底部时,在去加载新的数据。

我在查看API时发现GridView有个addView方法,可以把一个子View添加到GridView里面去。但是该方法需要重写onDraw方法。网上收集了一些资料,整理下。

其实,动态的添加数据并不困难。首先,GridView在添加数据时,会使用到adapter,这个adapter继承自BaseAdapter.

在这个adapter的getView方法里面实现数据的加载。当有新数据时,只需要往原先的数据容器中添加数据,然后用adapter的notifyDataSetChanged方法,来告知adapter数据已经更新了,此时,adapter会自动往GridView里面添加数据。这样,网adapter里面动态添加数据的功能就实现了。

GridView实现分页,原理基本如上。但是要实现底部点击查看更多的按钮,则还需要一些改装。代码说明网上有很多,但是使用网上的demo有些问题。

添加一个“查看更多”按钮,采用的是在数据容器List中添加一个null值在最后,用来盛放footerview,这样,在GridView回滚的过程中,会出现空指针异常的错误。原因是在position小于List.size()-1的时候,convertview为footerview。很容易的就想到了解决这个问题的方法,就是在position不对应footerview时,将convertview置为空,重新创建convertview。

原文链接:https://github.com/hyhe/gridview-with-footerview

以下是getView中修改的代码:

public View getView(int pos, View convertView, ViewGroup parent) {
//            System.out.println("############################");
//            System.out.println("footerViewEnable"+footerViewEnable);
//            Goods goods = mList.get(pos);
//            System.out.println("pos=>"+pos+"\nmList.size()=>"+mList.size());
//            System.out.println("mList=>"+mList);
//            System.out.println("mList@pos=>"+goods);
//            System.out.println("mList@pos=>"+mList.get(pos));
            
            if(convertView != null && convertView.getClass().equals(FooterView.class) && pos != mList.size() - 1) {
                convertView = null;
            }
            
            
            if(mList.get(pos) == null || pos == mList.size() - 1) {
                if(footerView != null) {
                    return footerView;
                }
                footerView = new FooterView(ListActivity.this);
                footerView.setLayoutParams(new GridView.LayoutParams(getDisplayWidth(), GridView.LayoutParams.WRAP_CONTENT));
                footerView.setOnClickListener(new View.OnClickListener() {    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        footerView.setStatus(FooterView.LOADING);
                        mHandler.post(mRunnable);
                    }
                });
                return footerView;
            }
            
            ViewHolder viewHolder = null;
            if(convertView == null) {
                viewHolder = new ViewHolder();
                convertView = (View) mInflater.inflate(R.layout.list_grid_item_view, null);
                viewHolder.img = (ImageView) convertView.findViewById(R.id.list_grid_img);
                viewHolder.txt = (TextView) convertView.findViewById(R.id.list_grid_text);
                convertView.setTag(viewHolder);
                
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.txt.setText(mList.get(pos).getGoodsName());
            imageLoader.displayImage(mList.get(pos).getGoodsImage(), viewHolder.img, options);
            
            return convertView;
            
        }


© 著作权归作者所有

共有 人打赏支持
qii

qii

粉丝 13
博文 77
码字总数 23520
作品 0
昆明
高级程序员
加载中

评论(2)

qii
qii

引用来自“xmlspyspring”的评论

“查看更多”,这种方式我觉得是个失败的模式,严重污染了adapter。
那有什么更好的方法呢?
xmlspyspring
xmlspyspring
“查看更多”,这种方式我觉得是个失败的模式,严重污染了adapter。
badgeView 如何实现 GridView 中imageview 右上角数字提醒?

问题:我想要利用badgeview 实现在gridview中如此的效果? 其中在gridview中 Integer[] m_ImageID= { R.drawable.a1,R.drawable.a2,R.drawable.a3, R.drawable.a4,R.drawable.a5,R.drawable......

songxiaobo
2013/09/22
4.4K
4
2014年DevExpress使用教程合集

DevExpress系列教程 DevExpress Universal Subscription是DevExpress旗下重要的用户界面控件,也是全球使用最多的.NET用户界面控件套包。自2014年以来,慧都小编为大家奉献了很多使用教程。如...

咲晚杍
2014/12/31
0
1
asp.net gridview问题?

我在用ASP.net写一个简单的选课系统,在学生选课中,我准备用GridView显示可以选课的课程相关信息。我在Gridview最前列添加了一个CheckBox用于学生进行批量的课程选择,请问我应该如何同But...

倪勇康
2012/05/15
250
0
界面和后台传输数据如何弄到一起?

如何做一个网格,往里面动态添加数据啊!好像要用到GridView和Adapter,但是该怎样用,我不会!

一串紫葡萄
2012/09/20
247
2
Android GridView使用

一.GridView的设置 <GridView android:numColumns="auto_fit" <!--GridView的列数设置为自动--> android:columnWidth="90dp"<!--每列的宽度,即item的宽度--> android:stretchMode="columnWi......

SRain215
2016/02/25
256
0
DevExpress使用教程:Gridview下拉框

本人最近使用到 DevExpress Gridview下拉框repositoryItemComboBox控件,下面就详细写一下这个实现的过程,分享一下,同时也是对这个知识再次熟悉一遍。 【DXperience Universal Suite下载】...

Miss_Hello_World
02/02
0
0
Android UI界面

@鉴客 你好,想跟你请教个问题: 如何实现类似于搜狐新闻 新闻订阅的功能? 关键是这个动态添加GridView选项和满了一页后,动态添加一页GridView是如何实现呢? 能否提供一些思路?...

白学原
2012/10/23
625
2
DevExpress使用教程:XtraGridControl动态添加右键菜单

在使用 GridControl 的时候经常需要添加右键菜单。一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单。但是涉及到一些单击事件会收到编辑器编辑状态影...

Miss_Hello_World
02/11
0
0
Android的ViewGroup添加GridView实现Launcher滑动GridView的item点击无效

实现了ViewGroup中动态创建GridView的功能,类似Launcher展示应用,但是动态添加的GridView的OnItemOnItemClickListener,事件始终无效。请各位大侠帮忙看看是什么原因造成的。 scrollLayout...

黄青
2013/05/01
2.6K
2
Android UI:机智的远程动态更新策略

腾讯Bugly特约作者: 王金波 问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加、减少、内容变化、以及跳转界面发生变化等问题。每次发生变...

腾讯Bugly
2015/11/26
70
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部