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,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); } 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填充数据的方法全部内容,希望文章能够帮你解决Android ListView填充数据的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)