举例做一个微信的中间部分(好友消息等信息通知)
第一种:BaseAdapter()
package com.example.wx;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import wx.aa;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView lv;
private List<aa> li=new ArrayList<aa>();//为方法一创建一个集合 ,aa类名
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv=(ListView)findViewById(R.id.listView1); //找到listvie控件
for( int i=0;i<100;i++) //模拟读取数据库或者互联网添加100条数据
//为方法一
aa a=new aa();
a.setTou1("sss");
a.setUserName("张三"+i);
a.setLastMessage("晚上有约");
a.setDatetime("11月11日");
li.add(a);
}
//使用BaseAdapter()
lv.setAdapter(new BaseAdapter() {
@Override
//只是一个显示多少条数据的方法(这里我们直接返回li.size()就是集合的个数100条)
public int getCount() {
// TODO Auto-generated method stub
return li.size();
}
@Override
//操作listview的item项 也就是一行一行的数据方法(里面包含多个控件)
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=null; //定义一个View
if (convertView==null) //如果缓存为空,我们生成新的布局作为1个item
{
Log.i("info:","没有缓存,重新生成"+position);
LayoutInflater inflater=MainActivity.this.getLayoutInflater();
//因为getView()返回的对象,adapter会自动赋给ListView, R.layout.listview_item_layout是布局文件
vi=inflater.inflate(R.layout.listview_item_layout, null);
}
else
{
Log.i("info:","有缓存"+position);
vi=convertView;
}
//获取集合
aa a=li.get(position);
//找到item里面的所有控件绑定数据
TextView name=(TextView)vi.findViewById(R.id.textView1); //名字
name.setText(a.getUserName());//赋值
TextView messge=(TextView)vi.findViewById(R.id.t2); //最后一条消息
messge.setText(a.getLastMessage());
TextView datetime=(TextView)vi.findViewById(R.id.t3); //时间
datetime.setText(a.getDatetime());
return vi; //最后返回
}
运行截图
第二种方法SimpleAdapter()
package com.example.wx;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import wx.aa;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView lv;
private SimpleAdapter sa; //创建一个SimpleAdapter
private List<Map<String,Object>> li2=new ArrayList<Map<String,Object>>(); //为方法二创建另一个集合
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv=(ListView)findViewById(R.id.listView1);
for( int i=0;i<100;i++)
{
Map<String,Object> item=new HashMap<String,Object>();
item.put("tuo", R.drawable.tou1);
item.put("name", "张三");
item.put("messge", "今晚有约");
item.put("datetime", "11月11日");
li2.add(item);
}
//第二种方法使用BaseAdapter() ,里面有五个参数 第一个上下文this,第二个data数据源,第三个布局文件,第四个from从哪里来,第五个to往哪里去(也就是绑定控件)
sa=new SimpleAdapter(
this,
li2,
R.layout.listview_item_layout,
new String[]{"tuo","name","messge","datetime"},
new int[]{R.id.imageView1,R.id.textView1,R.id.t2,R.id.t3});
lv.setAdapter(sa);
最后运行也是一样的
两种方法各有差异第一种推荐使用,第二种代码量比较少,看个人喜号