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
# ListView数据填充
# ListView实现填充数据不使用布局
# Android Studio使用小技巧:布局预览时填充数据
# 基于Android中的 AutoCompleteTextView实现自动填充
# Android矢量图之VectorDrawable类自由填充色彩
# Android ScrollView无法填充满屏幕的解决办法
# Android图片等比例缩放和填充屏幕效果
# Android不规则图像填充颜色小游戏
# Android图像处理之泛洪填充算法
# Android多边形区域递归种子填充算法的示例代码
# Android不规则封闭区域填充色彩的实例代码
# Android多边形区域扫描线种子填充算法的示例
# 我们可以
# 的是
# 都是
# 如有
# 中有
# 它是
# 可以通过
# 希望能
# 自定义
# 为其
# 重写
# 将它
# 能将
# 谢谢大家
# 几乎所有
# 能不
# 要为
# 设置为
# 来实现
# 来为
相关文章:
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
制作公司内部网站有哪些,内网如何建网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何用IIS7快速搭建并优化网站站点?
定制建站流程解析:需求评估与SEO优化功能开发指南
招商网站制作流程,网站招商广告语?
北京网站制作的公司有哪些,北京白云观官方网站?
实现虚拟支付需哪些建站技术支撑?
如何通过虚拟主机快速搭建个人网站?
清除minerd进程的简单方法
孙琪峥织梦建站教程如何优化数据库安全?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何选购建站域名与空间?自助平台全解析
建站主机选哪种环境更利于SEO优化?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
盐城做公司网站,江苏电子版退休证办理流程?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
建站之星展会模板:智能建站与自助搭建高效解决方案
网站制作需要会哪些技术,建立一个网站要花费多少?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
济南企业网站制作公司,济南社保单位网上缴费步骤?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
网站企业制作流程,用什么语言做企业网站比较好?
济南专业网站制作公司,济南信息工程学校怎么样?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何高效生成建站之星成品网站源码?
建站之星2.7模板:企业网站建设与h5定制设计专题
小型网站建站如何选择虚拟主机?
网站制作难吗安全吗,做一个网站需要多久时间?
建站主机与服务器功能差异如何区分?
如何在IIS7上新建站点并设置安全权限?
如何快速打造个性化非模板自助建站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在腾讯云服务器快速搭建个人网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何快速使用云服务器搭建个人网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何通过cPanel快速搭建网站?
如何在建站之星网店版论坛获取技术支持?
如何快速搭建高效香港服务器网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
*请认真填写需求信息,我们会在24小时内与您取得联系。