Android ListView填充数据的方法
程序员文章站
2023-12-15 23:38:58
android listview填充数据的方法
因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少的使用xml的布局文件,开发...
android listview填充数据的方法
因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少的使用xml的布局文件,开发中需要在listview中显示数据,网上查到的几乎所有的示例,都是通过xml文件来为listview的item提供布局样式,甚是不方便。
能不能将自己通过代码创建的布局(如view,linearlayout)等动态的布局到listview呢?当然可以。
为了给listview提供数据,我们需要为其设置一个适配,我们可以从baseadapter继承,然后重写它的getview方法,这个方法中有一个参数convertview,我们可以将它设置为我们自定义的视图并返回,来实现加载用代码定义好的布局。
定义一个linearlayout布局,它是继承自view的,所以可以通过getview返回(注意:不要为这个布局使用 linearlayout.layoutparams 参数,因为listview不识别,他识别的是abslistview layoutparams)
代码如下:
public class priceboard extends linearlayout { private listview listview; private list items; private linearlayout.layoutparams params; public priceboard(context context, attributeset attrs) { super(context, attrs); items = new arraylist(); this.setorientation(horizontal); params = new linearlayout.layoutparams(layoutparams.match_parent, linearlayout.layoutparams.match_parent); listview = new listview(context); listview.setlayoutparams(params); priceboardadapter priceboardadapter = new priceboardadapter(context); listview.setadapter(priceboardadapter); addview(listview, params); } public void add(pricedata data){ priceboarditem item = new priceboarditem(this.getcontext(),null); item.setitem(data); items.add(item); params.setmargins(10,0,0,2); // item.setlayoutparams(params); } public priceboarditem getitemview(int index){ return (priceboarditem)items.get(index); } private class priceboarditem extends linearlayout{ private textview nameview; private textview encodeview; private textview priceview; private pricedata pricedata; public priceboarditem(context context, attributeset attrs) { super(context, attrs); this.setorientation(horizontal); nameview = new textview(context); nameview.settextsize(typedvalue.complex_unit_px,38); encodeview = new textview(context); encodeview.settextsize(typedvalue.complex_unit_px,28); priceview = new textview(context); priceview.settextsize(typedvalue.complex_unit_px,48); priceview.setgravity(gravity.center); setlayout(); } public textview getnameview(){ return nameview; } public textview getencodeview(){ return encodeview; } public textview getpriceview(){ return priceview; } public pricedata getpricedata(){ return pricedata; } private void setlayout(){ layoutparams p = new linearlayout.layoutparams(linearlayout.layoutparams.match_parent, linearlayout.layoutparams.wrap_content,1); linearlayout linearlayout = new linearlayout(getcontext()); linearlayout.setorientation(vertical); linearlayout.addview(nameview,p); linearlayout.addview(encodeview,p); addview(linearlayout, p); p = new linearlayout.layoutparams(linearlayout.layoutparams.match_parent, linearlayout.layoutparams.match_parent,1); linearlayout = new linearlayout(getcontext()); linearlayout.setorientation(vertical); linearlayout.addview(priceview,p); addview(linearlayout, p); } public void setitem(pricedata data){ pricedata = data; } } private class priceboardadapter extends baseadapter{ private context _context; public priceboardadapter(context context){ _context = context; } public int getcount(){ return items.size(); } public object getitem(int position) { return position; } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { priceboarditem view = getitemview(position); pricedata data = ((priceboarditem) items.get(position)).getpricedata(); view.getnameview().settext(data.getname()); view.getencodeview().settext(data.getencode()); view.getpriceview().settext(string.valueof(data.getprice())); convertview = view; return convertview; } }
调用:
priceboard priceboard = new priceboard(context,null); pricedata = new pricedata(); pricedata.setname("现货白银"); pricedata.setencode("ag"); pricedata.setprice(4006); priceboard.add(pricedata); pricedata = new pricedata(); pricedata.setname("现货铜"); pricedata.setencode("cu"); pricedata.setprice(43895); priceboard.add(pricedata); pricedata = new pricedata(); pricedata.setname("现货镍"); pricedata.setencode("ni"); pricedata.setprice(43895); priceboard.add(pricedata); addview(priceboard);
效果:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android ListView之setEmptyView正确使用方法
-
Android顶部状态栏透明化并释放空间的两种实现方法
-
android调用原生图片裁剪后图片尺寸缩放的解决方法
-
Android使用GPS获取用户地理位置并监听位置变化的方法
-
解决Asp.net Mvc返回JsonResult中DateTime类型数据格式问题的方法
-
Mysql 数据库双机热备的配置方法
-
android RadioGroup的使用方法
-
数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)
-
Zend Framework实现多服务器共享SESSION数据的方法
-
Android4.0平板开发之隐藏底部任务栏的方法