展会信息港展会大全

android样式布局---)ListView(附上源码)
来源:互联网   发布日期:2015-11-26 12:43:02   浏览:1076次  

导读:在android应用开发过程中,Listview 是常用的数据展现控件,往往用于显示列表形式的数据。如果仅仅显示数据往往会显得很单调,很多时候根据需要定义不同的item 背景选项,例如定义数...

在android应用开发过程中,Listview 是常用的数据展现控件,往往用于显示列表形式的数据。如果仅仅显示数据往往会显得很单调,很多时候根据需要定义不同的item 背景选项,例如定义数据的标题,表头或者间隔显示Listview item背景内容。

如图的所示的背景内容,现在以一个WeatherDemo为模型分析Listview的相关使用方法。

实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_item.xml)。在填充数据的时候往往采用构造一个Adapter数据类型,根据构造的数据类型,判断不同的数据类型,采用LayoutInflater类填充不同的layout文件,从而返回不同的View。

构造WeatherAdapter类继承BaseAdapter并实现相关的接口函数,实现对列表数据的填充。其中数据的结构比较关键,可以控制相关的标题和内容的关系。

WeatherAdapter类则主要是实现并填充相应的数据,显示相关数据。

程序代码如下:

public class WeatherAdapter extends BaseAdapter {

// 数据源

private List> list;

private Context context;

private int[] type;

// 构造函数

public WeatherAdapter(Context context, List> 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);

} else if (cityName.equals("深圳")) {

image.setImageResource(R.drawable.shenzhen);

}

TextView city = (TextView) view.findViewById(R.id.city);

city.setText(cityName);

} else {

view = mInflater.inflate(R.layout.content_item, null);

// 获取数据

String content = list.get(position).get("data");

// 分离数据

String[] items = content.split(",");

TextView weather = (TextView) view.findViewById(R.id.content);

weather.setText(items[0] + "天气: " + items[1] + ";温度:" + items[2]);

TextView date = (TextView) view.findViewById(R.id.date);

date.setText(items[3]);

}

return view;

}

}

MainActivity.java

public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ListView list = (ListView) findViewById(R.id.list_items);

ArrayList> listItem = new ArrayList>();

// 各个城市的天气

String[] data = { "广州", "今天,晴天,22℃,2014-4-18",

"明天,多云转阵雨,32~23℃,2014-4-19", "后天,阴转多云,33~23℃,2014-4-20", "上海",

"今天,阵雨转雷阵雨,31~25℃,2014-4-18", "明天,雷阵雨转阴,31~24℃,2014-4-19",

"后天,阵雨转多云,32~27℃,2014-4-20", "北京", "今天,中雨转暴雨,32~25℃,2014-4-18",

"明天,暴雨转大到暴雨,29~25℃,2014-4-19", "后天,暴雨转阵雨,29~25℃,2014-4-20",

"深圳", "今天,中雨转暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19",

"后天,大雨转阵雨,28~25℃,2014-4-20" };

// 可以是城市的类型判断或者第几天判断,根据不同的需求构造不同的数组结构适应不同的应用

int[] type = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };

int size = data.length;

for (int i = 0; imap = new HashMap();

// 根据不同需求可以构造更复杂的数据,目前之构造一个数据

map.put("data", data[i]);

listItem.add(map);

}

WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);

list.setAdapter(listItemAdapter);

}

}

三个xml布局文件:

city_item.xml

content_item.xml

main.xml

源码下载地址:http://download.csdn.net/detail/yangweixing10/7214057

赞助本站

人工智能实验室

相关热词: android开发

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港