首先在xml文件中定义ListView组件

<ListView
  android:id="@+id/show_view_list"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" >
</ListView>

在Activity文件中也定义一个ListView的引用,然后将两者通过以下代码关联在一起:

listview=(ListView)findViewById(R.id.show_view_list);

为使列表组件的显示风格达到你想要的结果,通常都是自定义一个view_item.xml文件,

该文件的作用在于控制每行的显示效果,如要使用列表组件显示出下图的风格。

则view_item.xml文件代码为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" > <ImageView
android:id="@+id/item_imageview"
android:layout_width="80dip"
android:layout_height="60dip" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" > <TextView
android:id="@+id/item_textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:textSize="15dip" /> <TextView
android:id="@+id/item_textview2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="12dip" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" > <RatingBar
android:id="@+id/item_ratingbar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars=""
android:rating=""
android:stepSize="0.1" /> <TextView
android:id="@+id/item_textview3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:text="评分:" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- 简要介绍 -->
<TextView
android:id="@+id/item_textview4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="12dip" /> </LinearLayout>

定义好每一行的显示风格后接下来就是将数据绑定到列表组件上显示出来,

这时就会用到Adapter类,用的最多的还是BaseAdapter类,重新写一个类

继承BaseAdapter类,通常要实现BaseAdapter类的四个方法,代码如下:

public class View_Adapter extends BaseAdapter {

  //数据成员和构造方法由自己定义

  private Context mycontent;//必须要有的
  private List<Views> list;//根据自身的需要进行定义,要有数据源才能显示   public View_Adapter(Context content, List<Views> list ) {
    mycontent = content;
    this.list = list;
  } @Override
public int getCount() {
// TODO Auto-generated method stub   //获取列表组件的总行数
  return list.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub   //获取该行的对象
  return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub   //获取该行的id
  return position;
} //控制每行显示的关键方法在如下方法 @Override
public View getView(int position, View convertView, ViewGroup parent) {
  LayoutInflater minflater=LayoutInflater.from(mycontent);
  convertView=minflater.inflate(R.layout.view_item,null);//绑定每行显示风格的view_item.xml文件   MyView my=new MyView();//自定义的组件类,view_item.xml文件中组件对应的java类   //将java组件类与view_item.xml文件中的组件关联在一起
  my.viewName_text=(TextView)convertView.findViewById(R.id.item_textview1);
  my.viewMessage_text=(TextView)convertView.findViewById(R.id.item_textview2);
  my.viewGrade_text=(TextView)convertView.findViewById(R.id.item_textview3);
  my.viewIntroduction_text=(TextView)convertView.findViewById(R.id.item_textview4);
  my.imageview=(ImageView)convertView.findViewById(R.id.item_imageview);
  my.grade=(RatingBar)convertView.findViewById(R.id.item_ratingbar);
  //通过java组件类本来就有的方法将数据源中的数据显示出来
  my.viewName_text.setText(((Views) list.get(position)).getName());
  String message="";
  if(list.get(position).getGrade_number()==){
    message=list.get(position).getLocation()+"\n暂无人参加评论";
  }else{
    message=list.get(position).getLocation()+"\n已有"+list.get(position).getGrade_number()+"参加评论";
  }
  my.viewMessage_text.setText(message);
  my.viewIntroduction_text.setText(" "+list.get(position).getIntroduction().substring(, )+"...>>详细");
  java.text.DecimalFormat df=new java.text.DecimalFormat("0.00");
  my.viewGrade_text.setText("评分:"+df.format(list.get(position).getGrade())+"星"); my.grade.setRating((float)list.get(position).getGrade());
my.imageview.setBackgroundResource(list.get(position).getImage());
return convertView;
} }
class MyView{
  public ImageView imageview;
  public TextView viewName_text,viewMessage_text,viewGrade_text,viewIntroduction_text;
  public RatingBar grade;
}

定义好view_item.xml文件和继承实现了BaseAdapter类后,接下来就是调用这些文件和类,以达到上图的显示效果

调用代码如下:

  

//list的数据类型是List<Views>(包含Views对象的集合)

  View_Adapter adapter=new View_Adapter(Show_view.this, list);

  listview.setAdapter(adapter);

  //关于List集合的应用可以参考一下其他文件

ListView组件应用源码的更多相关文章

  1. 如何在Eclipse中查看Android源码或者第三方组件包源码

    文章出处:http://blog.csdn.net/cjjky/article/details/6535426 在学习过程中如果经常阅读源码,理解程度会比较深,学习效率也会比较高,那么如何方便快捷的阅 ...

  2. 基于微软企业库的AOP组件(含源码)

    软件开发,离不开对日志的操作.日志可以帮助我们查找和检测问题,比较传统的日志是在方法执行前或后,手动调用日志代码保存.但自从AOP出现后,我们就可以避免这种繁琐但又必须要实现的方式.本文是在微软企业库 ...

  3. .Net Core缓存组件(Redis)源码解析

    上一篇文章已经介绍了MemoryCache,MemoryCache存储的数据类型是Object,也说了Redis支持五中数据类型的存储,但是微软的Redis缓存组件只实现了Hash类型的存储.在分析源 ...

  4. .Net Core缓存组件(MemoryCache)源码解析

    一.介绍 由于CPU从内存中读取数据的速度比从磁盘读取快几个数量级,并且存在内存中,减小了数据库访问的压力,所以缓存几乎每个项目都会用到.一般常用的有MemoryCache.Redis.MemoryC ...

  5. Django 之 admin组件使用&源码解析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...

  6. .Net Core 认证组件之Cookie认证组件解析源码

    接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且 ...

  7. Spring源码系列(二)--bean组件的源码分析

    简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文 ...

  8. Java并发包源码学习系列:同步组件CountDownLatch源码解析

    目录 CountDownLatch概述 使用案例与基本思路 类图与基本结构 void await() boolean await(long timeout, TimeUnit unit) void c ...

  9. QQ分组显示列表ExpandableListView组件应用源码

    ExpandableListView又称为可扩展的ListView组件,他和ListView组件很相似 不过每行的显示有两个xml文件,一个xml文件用于定义分组列表的显示风格, 还有一个xml文件用 ...

随机推荐

  1. 乌邦图ubuntu配置iptables的NAT上网

    cat /etc/network/iptables.up.rules # Generated by iptables-save v1. :: *nat :PREROUTING ACCEPT [:] : ...

  2. TreeMap的使用

    Map<Integer, String> map = new TreeMap<Integer, String>();//TreeMap本身具有排序功能(默认按键升序排序) ma ...

  3. JavaScript数组删除重复元素(去重)的方法

    1. var arr=str.split(""); ;arr.length->i;i++){ ;j<arr.length;j++){ if(arr[j]==arr[i] ...

  4. service XXX does not support chkconfig

    有时候为了方便管理,我们常常喜欢在Linux中将之安装为服务,然后就可以使用服务来管理. 但是当我们运行安装服务的命令时候,假设服务名为myservice #chkconfig --add myser ...

  5. UI设计中px、pt、ppi、dpi、dp、sp之间的关系

    UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...

  6. 在 Linux 下将 PNG 和 JPG 批量互转的四种方法

    计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务[1]的方法.这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .J ...

  7. 获取Linux进程运行在哪个CPU内核上面的方法

    首先,当某些时候,在一段程序或者借助第三方软件进行程序协助的时候,在性能的优化,以及程序bug的排除上面,可能会想知道该程序执行的进程被调度到了哪一个CPU内核进行工作,从而可以推断是否是受限于硬件还 ...

  8. javascript设计模式(单体模式)

    主要内容: js中最基本.应用最广的模式就是单体模式,实现原理是将代码组织为一个逻辑单元,这个逻辑单元中的代码可以通过单一的变更进行访问,确保对象只存在一份实例. 单体模式的特点: 在网页中使用全局变 ...

  9. 禁止盗链,强制回登录页面web.config配置

    <system.web> <compilation debug="true" targetFramework="4.5" /> < ...

  10. 百度地图定位经纬度返回4.9E-324有关问题

    1.查看你的应用是否有权限查看你的地理位置信息,有可能是你没有加上权限,或者当你第一次打开app时询问你是否给予软件权限查看你的地理位置信息,你选择了否,所以经纬度就一直返回4.9E-324 2.查看 ...