Android ListView填充数据的方法

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);

效果:

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-09-15 08:03:30

Android ListView填充数据的方法的相关文章

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解_Android

本文实例讲述了Android操作SQLite数据库(增.删.改.查.分页等)及ListView显示数据的方法.分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用ListView控件显示 二.新建一个android工程--DBSQLiteOperate 工程目录: 三.清单列表AndroidManifest.xml的配置

android listview 滚动数据重复

问题描述 android listview 滚动数据重复 我的listview 每个item都有一个edittext 默认值是1 当我修改第一行的edittext值之后 向下滚动 下边某一行的edittext值就变的跟第一行一样了 这该怎么解决 求解答? 解决方案 Android ListView 滚动加载数据Android ListView 滚动加载数据Android ListView 滚动加载数据

getview方法不执行- android listview自定义adapter,getview方法不显示

问题描述 android listview自定义adapter,getview方法不显示 adapter的getCount值不为0,但是不执行getview方法,在ErrorLog中打印出来的log在下面贴出来了,希望路过的大牛们帮忙看看 解决方案 问题找到了,是我的listView的布局控件不正确,已经改好了 解决方案二: android listView 重写Adapter方法getView的性能优化问题 解决方案三: 空指针异常,找找在哪个位置. 解决方案四: log和问的错没什么关系 解

listview 数据阴影-android listview 滑动数据阴影

问题描述 android listview 滑动数据阴影 我的listview,在显示数据时,偶尔会有滑动数据有阴影的现象.如图所示.一旦有阴影就只能重启才会好.请问高手可能怎么回事! 解决方案 Android[ ListView]滑动数据加载android listView滑动加载数据Android ListView 去阴影 解决方案二: listview有去掉阴影的属性,你查查就可以了 解决方案三: android:id=""@+id/id_main_listview"&

Android解析JSON数据的方法分析_Android

本文实例讲述了Android解析JSON数据的方法.分享给大家供大家参考,具体如下: JSON作为一种"轻量"的数据结构传递数据,在JS中有广泛的应用 Google公司对JSON的解析提供了gson.jar这个包,它不依赖于其他任何JAR包:自从Android3.0中已经合入了该解析器的功能,但之前的版本是没有的. findViewById(R.id.parseBtn).setOnClickListener(new OnClickListener(){ @Override public

android针对json数据解析方法实例分析_Android

本文实例讲述了android针对json数据解析方法.分享给大家供大家参考.具体如下: JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.

Android解析JSON数据的方法分析

本文实例讲述了Android解析JSON数据的方法.分享给大家供大家参考,具体如下: JSON作为一种"轻量"的数据结构传递数据,在JS中有广泛的应用 Google公司对JSON的解析提供了gson.jar这个包,它不依赖于其他任何JAR包:自从Android3.0中已经合入了该解析器的功能,但之前的版本是没有的. findViewById(R.id.parseBtn).setOnClickListener(new OnClickListener(){ @Override public

Android ListView分页功能实现方法_Android

通过本次小Demo我学到了: 1.ListView的小小的一个分页功能 2.加深了对自定义控件的理解 3.对ListView的优化 4.对BaseAdapter的使用 5.自定义Adapter 6.接口的回调 要实现下面的效果--当拖动ListView到底部的时候,显示一个ProgressBar和一个"正在加载..."的TextView.并且过两秒钟后,在下面加载出新的数据.项目的目录结构和程序要实现的效果如下:      首先是布局部分: 我为了实现此效果,首先在布局文件中新建了一个

Android ListView分页功能实现方法

通过本次小Demo我学到了: 1.ListView的小小的一个分页功能 2.加深了对自定义控件的理解 3.对ListView的优化 4.对BaseAdapter的使用 5.自定义Adapter 6.接口的回调 要实现下面的效果--当拖动ListView到底部的时候,显示一个ProgressBar和一个"正在加载..."的TextView.并且过两秒钟后,在下面加载出新的数据.项目的目录结构和程序要实现的效果如下: 首先是布局部分: 我为了实现此效果,首先在布局文件中新建了一个foote