第一步呀BaseAdapter用ListView的布局
1.新建一个main.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fastScrollEnabled="true" /></LinearLayout>
2.新建一个list_item.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" a
ndroid:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
<TextView android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
public class Demo17Activity extends Activity {
private ListView lv;
private List<Map<String, Object>> data;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.lv); //获取将要绑定的数据设置到
data中 data = getData();
MyAdapter adapter = new MyAdapter(this); lv.setAdapter(adapter); }
private List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
for(int i=0;i<10;i++) { m
ap = new HashMap<String, Object>();
map.put("img", R.drawable.ic_launcher);
map.put("title", "跆拳道"); map.put("info", "快乐源于生活..."); list.add(map); } return list; } //ViewHolder静态类 static class ViewHolder { public ImageView img; public TextView title; public TextView info; } public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater = null; private MyAdapter(Context context) { //根据context上下文加载布局,这里的是Demo17Activity本身,即this this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { //How many items are in the data set represented by this Adapter. //在此适配器中所代表的数据集中的条目数 return data.size(); } @Override public Object getItem(int position) { // Get the data item associated with the specified position in the data set. //获取数据集中与指定索引对应的数据项 return position; } @Override public long getItemId(int position) { //Get the row id associated with the specified position in the list. //获取在列表中与指定索引对应的行id return position; } //Get a View that displays the data at the specified position in the data set. //获取一个在数据集中指定索引的视图来显示数据 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //如果缓存convertView为空,则需要创建View if(convertView == null) { holder = new ViewHolder(); //根据自定义的Item布局加载布局 convertView = mInflater.inflate(R.layout.list_item, null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.title = (TextView)convertView.findViewById(R.id.tv); holder.info = (TextView)convertView.findViewById(R.id.info); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource((Integer)data.get(position).get("img")); holder.title.setText((String)data.get(position).get("title")); holder.info.setText((String)data.get(position).get("info")); return convertView; } }}
第二
package com.yee4.samplelistviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class BaseActivity extends Activity {
ListView mListView;
private MyAdapter myAdapter;
private MyAdapter2 myAdapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.mListView);
initData1();
}
//---------------------------方法一----------------------------------------
//数据加载方式一
private void initData1(){
myAdapter = new MyAdapter(this);
mListView.setAdapter(myAdapter);
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
for(int i = 0 ; i < 50;i ++ )
{
Map<String,String> map = new HashMap<String, String>();
map.put("tv", "firstNameT"+i);
map.put("if", "secondNameTextView"+i);
list.add(map);
}
//设置数据源
myAdapter.setData(list);
}
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater = null;
private List<Map<String,String>> data;
private MyAdapter(Context context){
//根据context上下文加载布局,这里的是Demo17Activity本身,即this
this.mInflater = LayoutInflater.from(context);
}
//设置外部数据
public void setData(List<Map<String,String>> list){
this.data =list;
//通知listview 数据改变了刷页面
this.notifyDataSetChanged();
}
//获取数据也的大小(个数)
@Override
public int getCount() {
// TODO Auto-generated method stub
if(data!=null){
return data.size();
}
return 0;
}
//获取每个item数据
@Override
public Map<String,String> getItem(int point) {
// TODO Auto-generated method stub
return data.get(point);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
//加载视图文件
@Override
public View getView(int point, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
//视图绑定,如果视图为空,重新加载一个视图
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item, null);
}
//--------------------------------------------------------
//数据邦迪
Map<String,String> item =getItem(point);
if(item!=null){
TextView tvTextView = (TextView)convertView.findViewById(R.id.tv);
tvTextView.setText(item.get("tv"));
TextView infoTextView = (TextView)convertView.findViewById(R.id.info);
infoTextView.setText(item.get("if"));
}
return convertView;
}
}
//----------------方法二-------------------------
private void intData2(){
myAdapter2=new MyAdapter2(this);
mListView.setAdapter(myAdapter2);
List<ListDataItem> list = new ArrayList<ListDataItem>();
for(int i = 0 ; i < 50;i ++ )
{
ListDataItem item1 =new ListDataItem();
item1.setTv("第"+i+"个");
item1.setInf("secondNameTextView"+i);
list.add(item1);
}
//设置数据源
myAdapter2.setData(list);
}
public class MyAdapter2 extends BaseAdapter{
private LayoutInflater mInflater = null;
private List<ListDataItem> data;
private MyAdapter2(Context context){
this.mInflater = LayoutInflater.from(context);
}
public void setData(List<ListDataItem> data){
this.data = data;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(data!=null){
return data.size();
}
return 0;
}
@Override
public ListDataItem getItem(int point) {
// TODO Auto-generated method stub
return data.get(point);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int point, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
//视图绑定,如果视图为空,重新加载一个视图
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item, null);
}
ListDataItem item =getItem(point);
if(item!=null){
TextView tvTextView = (TextView)convertView.findViewById(R.id.tv);
tvTextView.setText(item.getTv());
TextView infoTextView = (TextView)convertView.findViewById(R.id.info);
infoTextView.setText(item.getInf());
}
return convertView;
}
}
private class ListDataItem{
private String tv;
private String inf;
public String getTv() {
return tv;
}
public void setTv(String tv) {
this.tv = tv;
}
public String getInf() {
return inf;
}
public void setInf(String inf) {
this.inf = inf;
}
}
}