android listview item 定义不同样式的布局

来源:互联网 发布:linux下ftp服务器搭建 编辑:程序博客网 时间:2024/05/29 19:16

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

LayoutInflater使用方法:

  1. LayoutInflater inflater = LayoutInflater.from(this);

  2. View view=inflater.inflate(R.layout.ID, null);
复制代码
  1. LayoutInflater inflater = LayoutInflater.from(this);

  2. View view=inflater.inflate(R.layout.ID, null);
复制代码

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

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

程序代码如下:

1.WeatherAdapter.java

  1. package com.test.main;

  2. import java.util.HashMap;
  3. import java.util.List;

  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseAdapter;
  9. import android.widget.ImageView;
  10. import android.widget.TextView;

  11. public class WeatherAdapter extends BaseAdapter{

  12. //数据源
  13. private List<HashMap<String,String>> list;
  14. private Context context;
  15. private int []type;

  16. //构造函数
  17. public WeatherAdapter (Context context,List<HashMap<String,String>> list,
  18. int[] type){
  19. this.context = context;
  20. this.list = list;
  21. this.type=type;
  22. }

  23. @Override
  24. public int getCount() {
  25. // TODO Auto-generated method stub
  26. return list.size();
  27. }

  28. @Override
  29. public Object getItem(int position) {
  30. // TODO Auto-generated method stub
  31. return list.get(position);
  32. }

  33. @Override
  34. public long getItemId(int position) {
  35. // TODO Auto-generated method stub
  36. return position;
  37. }

  38. @Override
  39. public View getView(int position, View convertView, ViewGroup parent) {
  40. // TODO Auto-generated method stub
  41. LayoutInflater mInflater = LayoutInflater.from(context);
  42. //产生一个View
  43. View view = null;
  44. //根据type不同的数据类型构造不同的View,也可以根据1,2,3天数构造不同的样式
  45. if(type[position]==0){
  46. view = mInflater.inflate(R.layout.city_item, null);
  47. //获取城市名称
  48. String cityName=list.get(position).get("data");
  49. ImageView image=(ImageView)view.findViewById(R.id.weather_image);

  50. if(cityName.equals("北京")){
  51. image.setImageResource(R.drawable.beijing);
  52. }else if(cityName.equals("上海")){
  53. image.setImageResource(R.drawable.shanghai);

  54. }else if(cityName.equals("广州")){
  55. image.setImageResource(R.drawable.guangzhou);

  56. }else if(cityName.equals("深圳")){
  57. image.setImageResource(R.drawable.shenzhen);

  58. }
  59. TextView city=(TextView)view.findViewById(R.id.city);
  60. city.setText(cityName);
  61. }else{
  62. view = mInflater.inflate(R.layout.content_item, null);
  63. //获取数据
  64. String content=list.get(position).get("data");
  65. //分离数据
  66. String []items=content.split(",");

  67. TextView weather=(TextView)view.findViewById(R.id.content);
  68. weather.setText(items[0]+"天气: "+items[1]+";温度:  "+items[2]);
  69. TextView date=(TextView)view.findViewById(R.id.date);
  70. date.setText(items[3]);

  71. }

  72. return view;
  73. }

  74. }
复制代码
2.ListViewActivity.java
  1. package com.test.main;

  2. import java.util.ArrayList;
  3. import java.util.HashMap;

  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.widget.ListView;

  7. public class ListViewActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. ListView list=(ListView) findViewById(R.id.list_items);

  14. ArrayList<HashMap<String, String>> listItem = new
  15. ArrayList<HashMap<String, String>>();

  16. //各个城市的天气
  17. String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多云转阵雨,32~23℃,2011-6-29","后天,阴转多云,33~23℃,2011-6-30",
  18. "上海","今天,阵雨转雷阵雨,31~25℃,2011-6-28","明天,雷阵雨转阴,31~26℃,2011-6-29","后天,阵雨转多云,32~27℃,2011-6-30",
  19. "广州","今天,中雨转暴雨,32~25℃,2011-6-28","明天,暴雨转大到暴雨,29~25℃,2011-6-29","后天,暴雨转阵雨,29~25℃,2011-6-30",
  20. "深圳","今天,中雨转暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","后天,大雨转阵雨,28~25℃,2011-6-30"};
  21. //可以是城市的类型判断或者第几天判断,根据不同的需求构造不同的数组结构适应不同的应用
  22. int []type={0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};
  23. int size=data.length;
  24. for(int i=0;i<size;i++){
  25. HashMap<String, String> map = new HashMap<String, String>();
  26. //根据不同需求可以构造更复杂的数据,目前之构造一个数据
  27. map.put("data", data[i]);
  28. listItem.add(map);
  29. }
  30. WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);
  31. list.setAdapter(listItemAdapter);

  32. }
  33. }
复制代码

三个xml布局文件:

3.city_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--  items选项 -->
  3. <RelativeLayout
  4. android:id="@+id/RelativeLayout"
  5. android:layout_width="fill_parent"
  6. xmlns:android="http://schemas.android.com/apk/res/android"
  7. android:layout_height="wrap_content"
  8. android:paddingBottom="4dip"
  9. android:paddingLeft="12dip"
  10. android:paddingRight="12dip"
  11. android:background="#9ACD32"
  12. >
  13. <ImageView
  14. android:paddingTop="4dip"
  15. android:layout_alignParentRight="true"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:id="@+id/weather_image"

  19. />
  20. <TextView
  21. android:layout_height="wrap_content"
  22. android:textSize="18dip"
  23. android:layout_width="fill_parent"
  24. android:id="@+id/city"
  25. android:paddingTop="6dip"
  26. android:textColor="@color/black"
  27. />

  28. </RelativeLayout>
复制代码
4.content_item.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--  items选项 -->
  3. <RelativeLayout
  4. android:id="@+id/RelativeLayout02"
  5. android:layout_width="fill_parent"
  6. xmlns:android="http://schemas.android.com/apk/res/android"
  7. android:layout_height="wrap_content"
  8. android:paddingBottom="4dip"
  9. android:paddingLeft="12dip"
  10. android:paddingRight="12dip"
  11. android:background="@drawable/listview_bg"
  12. >
  13. <ImageView
  14. android:paddingTop="22dip"
  15. android:layout_alignParentRight="true"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:id="@+id/weather_image"
  19. />
  20. <TextView
  21. android:layout_height="wrap_content"
  22. android:textSize="18dip"
  23. android:layout_width="fill_parent"
  24. android:id="@+id/content"
  25. android:paddingTop="6dip"
  26. />
  27. <TextView
  28. android:text=""
  29. android:layout_height="wrap_content"
  30. android:layout_width="fill_parent"
  31. android:layout_below="@+id/content"
  32. android:id="@+id/date"
  33. android:paddingRight="20dip"
  34. />
  35. </RelativeLayout>
复制代码
5.main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <ListView android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:divider="@color/white"
  10. android:dividerHeight="1dip"
  11. android:id="@+id/list_items"
  12. />
  13. </LinearLayout>
原创粉丝点击