首先在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. NPOI简单应用

    打开或创建文件 fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); 不同版本的workbook if ...

  2. IntelliJ Idea 集成svn 和使用

    最近公司的很多同事开始使用svn,便尝试了一下,虽然快捷键与eclipse 有些不同,但是强大的搜索功能与"漂亮的界面"(个人认为没有eclipse好看 ),还是值得我们去使用的. ...

  3. WCF账户密码认证

    记录一下我实现WCF用户认证与权限控制的实现方法, 也让其他网友少走一些弯路. 内容写得非常小白(因为我也是小白嘛), 比较详细, 方便WCF知识基础薄的朋友 主要分为下面几个步骤 作为例子, 创建最 ...

  4. Android安全之Intent Scheme Url攻击

    0X01 前言 Intent scheme url是一种用于在web页面中启动终端app activity的特殊URL,在针对intent scheme URL攻击大爆发之前,很多android的浏览 ...

  5. C# rename方法重命名文件

    记得C# File类中是没有rename这个方法 所以网上很多都用的是move moveTo copy+delete等这些方法 其实以上的方法 虽然可以实现功能 但看起来总觉得很蛋疼 今天百度 突然发 ...

  6. PMI列子1

    遍历得到PMI中,是注释类型的,你可以参考一下.int num_text, thetype, thesubtype;tag_t  draft_aid_tag = NULL_TAG;UF_UI_open ...

  7. [04]APUE:文件与目录

    [a] stat / lstat / fstat #include <sys/stat.h> int stat(const char *restrict pathname, struct ...

  8. DB2死锁的解决办法

    db2 get snapshot for locks on sampledb2 get db cfg for sampledb2 update db cfg using dlchktime 10000 ...

  9. 记录Gzip函数

    仅仅作个日志而与 public static function compress(param1:ByteArray) : ByteArray { var _loc_2:ByteArray; var _ ...

  10. Hadoop streaming模式获取jobconf参数

    1. 像map_input_file这种环境变量是在hadoop-streaming.jar程序中设置的,所以无需-cmdenv map_input_file参数就可以在php中直接引用,如$var= ...