ListView组件应用源码

首先在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="5"
android:rating="5"
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()==0){
    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(0, 50)+"...>>详细");
  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集合的应用可以参考一下其他文件

 

posted on 2013-07-11 20:16  笑傲人生乐园  阅读(185)  评论(0编辑  收藏  举报