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);
效果:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
如对本文有疑问, 点击进行留言回复!!
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug ———————————————— 版权声明:本文为CSDN博主「
JobScheduler 实现 特定时间,特定条件(系统空闲,电池电量,磁盘空间 ……)下执行任务
温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 10 Service
网友评论