Android ListView填充数据的方法

 更新时间:2017年09月04日 08:44:19   作者:bdmh  
这篇文章主要介绍了Android ListView填充数据的方法的相关资料,大多数实现这样的功能都是使用XML文件,这里就说下不使用布局文件如何实现,需要的朋友可以参考下

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开发之音视频协议介绍

    Android开发之音视频协议介绍

    本文对音视频的协议起源做详细介绍,学习之后可以加深对音视频知识的了解。这里的音视频不仅针对Android平台,其他平台也通用。
    2022-04-04
  • Flutter悬浮按钮FloatingActionButton使用详解

    Flutter悬浮按钮FloatingActionButton使用详解

    本文主要介绍了Flutter悬浮按钮FloatingActionButton使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Android基础之隐藏标题栏/设置为全屏/横竖屏切换

    Android基础之隐藏标题栏/设置为全屏/横竖屏切换

    大家好,本篇文章主要讲的是Android基础之隐藏标题栏/设置为全屏/横竖屏切换,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • android RecycleView实现多级树形列表

    android RecycleView实现多级树形列表

    这篇文章主要为大家详细介绍了android RecycleView实现多级树形列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • android全屏去掉title栏的多种实现方法

    android全屏去掉title栏的多种实现方法

    android全屏去掉title栏包括以下几个部分:实现应用中的所有activity都全屏/实现单个activity全屏/实现单个activity去掉title栏/自定义标题内容/自定义标题布局等等感兴趣的可参考下啊
    2013-02-02
  • Android ListView在Fragment中的使用示例详解

    Android ListView在Fragment中的使用示例详解

    这篇文章主要介绍了Android ListView在Fragment中的使用,因为工作一直在用mvvm框架,因此这篇文章是基于mvvm框架写的,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Android录制mp3格式文件

    Android录制mp3格式文件

    这篇文章主要为大家详细介绍了Android录制mp3格式文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Activity isFinishing()判断Activity的状态实例

    Activity isFinishing()判断Activity的状态实例

    下面小编就为大家分享一篇Activity isFinishing()判断Activity的状态实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Android webview加载H5方法详细介绍

    Android webview加载H5方法详细介绍

    这篇文章主要介绍了Android webview加载H5的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Service Activity的三种交互方式(详解)

    Service Activity的三种交互方式(详解)

    下面小编就为大家带来一篇Service Activity的三种交互方式(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论