全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

效果:

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


# 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小时内与您取得联系。