android listview item 定义不同样式的布局
2013-05-27 21:22
465 查看
实现思路:定义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);
复制代码
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);
}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;
}
}
复制代码
2.ListViewActivity.java
package com.test.main;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class ListViewActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView list=(ListView) findViewById(R.id.list_items);
ArrayList<HashMap<String, String>> listItem = new
ArrayList<HashMap<String, String>>();
//各个城市的天气
String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多云转阵雨,32~23℃,2011-6-29","后天,阴转多云,33~23℃,2011-6-30",
"上海","今天,阵雨转雷阵雨,31~25℃,2011-6-28","明天,雷阵雨转阴,31~26℃,2011-6-29","后天,阵雨转多云,32~27℃,2011-6-30",
"广州","今天,中雨转暴雨,32~25℃,2011-6-28","明天,暴雨转大到暴雨,29~25℃,2011-6-29","后天,暴雨转阵雨,29~25℃,2011-6-30",
"深圳","今天,中雨转暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","后天,大雨转阵雨,28~25℃,2011-6-30"};
//可以是城市的类型判断或者第几天判断,根据不同的需求构造不同的数组结构适应不同的应用
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;i<size;i++){
HashMap<String, String> map = new HashMap<String, String>();
//根据不同需求可以构造更复杂的数据,目前之构造一个数据
map.put("data", data[i]);
listItem.add(map);
}
WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);
list.setAdapter(listItemAdapter);
}
}
复制代码
三个xml布局文件:
3.city_item.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- items选项 -->
<RelativeLayout
android:id="@+id/RelativeLayout"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip"
android:background="#9ACD32"
>
<ImageView
android:paddingTop="4dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/weather_image"
/>
<TextView
android:layout_height="wrap_content"
android:textSize="18dip"
android:layout_width="fill_parent"
android:id="@+id/city"
android:paddingTop="6dip"
android:textColor="@color/black"
/>
</RelativeLayout>
复制代码
4.content_item.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- items选项 -->
<RelativeLayout
android:id="@+id/RelativeLayout02"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip"
android:background="@drawable/listview_bg"
>
<ImageView
android:paddingTop="22dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/weather_image"
/>
<TextView
android:layout_height="wrap_content"
android:textSize="18dip"
android:layout_width="fill_parent"
android:id="@+id/content"
android:paddingTop="6dip"
/>
<TextView
android:text=""
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@+id/content"
android:id="@+id/date"
android:paddingRight="20dip"
/>
</RelativeLayout>
复制代码
5.main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@color/white"
android:dividerHeight="1dip"
android:id="@+id/list_items"
/>
</LinearLayout>
LayoutInflater使用方法:
LayoutInflater inflater = LayoutInflater.from(this);
View view=inflater.inflate(R.layout.ID, null);
复制代码
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);
}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;
}
}
复制代码
2.ListViewActivity.java
package com.test.main;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class ListViewActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView list=(ListView) findViewById(R.id.list_items);
ArrayList<HashMap<String, String>> listItem = new
ArrayList<HashMap<String, String>>();
//各个城市的天气
String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多云转阵雨,32~23℃,2011-6-29","后天,阴转多云,33~23℃,2011-6-30",
"上海","今天,阵雨转雷阵雨,31~25℃,2011-6-28","明天,雷阵雨转阴,31~26℃,2011-6-29","后天,阵雨转多云,32~27℃,2011-6-30",
"广州","今天,中雨转暴雨,32~25℃,2011-6-28","明天,暴雨转大到暴雨,29~25℃,2011-6-29","后天,暴雨转阵雨,29~25℃,2011-6-30",
"深圳","今天,中雨转暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","后天,大雨转阵雨,28~25℃,2011-6-30"};
//可以是城市的类型判断或者第几天判断,根据不同的需求构造不同的数组结构适应不同的应用
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;i<size;i++){
HashMap<String, String> map = new HashMap<String, String>();
//根据不同需求可以构造更复杂的数据,目前之构造一个数据
map.put("data", data[i]);
listItem.add(map);
}
WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);
list.setAdapter(listItemAdapter);
}
}
复制代码
三个xml布局文件:
3.city_item.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- items选项 -->
<RelativeLayout
android:id="@+id/RelativeLayout"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip"
android:background="#9ACD32"
>
<ImageView
android:paddingTop="4dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/weather_image"
/>
<TextView
android:layout_height="wrap_content"
android:textSize="18dip"
android:layout_width="fill_parent"
android:id="@+id/city"
android:paddingTop="6dip"
android:textColor="@color/black"
/>
</RelativeLayout>
复制代码
4.content_item.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- items选项 -->
<RelativeLayout
android:id="@+id/RelativeLayout02"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip"
android:background="@drawable/listview_bg"
>
<ImageView
android:paddingTop="22dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/weather_image"
/>
<TextView
android:layout_height="wrap_content"
android:textSize="18dip"
android:layout_width="fill_parent"
android:id="@+id/content"
android:paddingTop="6dip"
/>
<TextView
android:text=""
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@+id/content"
android:id="@+id/date"
android:paddingRight="20dip"
/>
</RelativeLayout>
复制代码
5.main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@color/white"
android:dividerHeight="1dip"
android:id="@+id/list_items"
/>
</LinearLayout>
相关文章推荐
- android listview item定义不同的样式布局
- android listview item定义不同的样式布局
- android listview item定义不同的样式布局
- android listview item 加载不同的布局样式文件
- android中listview的item显示不同的布局
- android 在listview中 不同的item现实不同的 布局
- Android ListView的不同样式,getItemViewType,getViewTypeCount
- android Listview的getView和convertview原理解析以及使用不同的item布局(一)
- Android ListView item 不同布局实现
- Android应用之——利用getItemViewType为Listview的item设置不同的布局
- Android为ListView的Item设置不同的布局
- Android应用之——利用getItemViewType为Listview的item设置不同的布局
- android 一个listview中不同行Item使用不同布局
- Android为ListView的Item设置不同的布局
- Android中ListView使用getItemViewType为item设置不同的布局
- android Listview的getView和convertview原理解析以及使用不同的item布局(二)
- android listView的item 显示多种不同的布局
- Android listview设置多个不同的item样式
- Android ListView不同的item布局实现
- Android为ListView的Item设置不同的布局