Android Listview 是常用的数据展现控件,往往用于显示列表形式的数据。如果仅仅显示数据往往会显得很单调,很多时候根据需要定义不同的item 背景选项,例如定义数据的标题,表头或者间隔显示Listview item背景内容。
现在以一个Demo为模型,展现如图-1的所示的背景内容,分析Listview的相关使用方法。
图-1 天气列表显示的demo
实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_item.xml)。在填充数据的时候往往采用构造一个Adapter数据类型,根据构造的数据类型,判断不同的数据类型,采用LayoutInflater类填充不同的layout文件,从而返回不同的View。
LayoutInflater使用方法:
- LayoutInflater inflater = LayoutInflater.from(this);
- View view=inflater.inflate(R.layout.ID, null);
构造WeatherAdapter类继承BaseAdapter并实现相关的接口函数,实现对列表数据的填充。其中数据的结构比较关键,可以控制相关的标题和内容的关系。
ListViewActivity类则主要是实现并填充相应的数据,显示相关数据。
程序代码如下:
1.WeatherAdapter.java
- package com.test.main;
- import java.util.HashMap;
- import java.util.List;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class WeatherAdapter extends BaseAdapter{
- //数据源
- private List<HashMap<String,String>> list;
- private Context context;
- private int []type;
- //构造函数
- public WeatherAdapter (Context context,List<HashMap<String,String>> list,
- int[] type){
- this.context = context;
- this.list = list;
- this.type=type;
- }
- @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
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- LayoutInflater mInflater = LayoutInflater.from(context);
- //产生一个View
- View view = null;
- //根据type不同的数据类型构造不同的View,也可以根据1,2,3天数构造不同的样式
- if(type[position]==0){
- view = mInflater.inflate(R.layout.city_item, null);
- //获取城市名称
- String cityName=list.get(position).get("data");
- ImageView image=(ImageView)view.findViewById(R.id.weather_image);
- if(cityName.equals("北京")){
- image.setImageResource(R.drawable.beijing);
- }else if(cityName.equals("上海")){
- image.setImageResource(R.drawable.shanghai);
- }else if(cityName.equals("广州")){
- image.setImageResource(R.drawable.guangzhou);
- }