zoukankan      html  css  js  c++  java
  • 安卓ListView操作的两种方法

    举例做一个微信的中间部分(好友消息等信息通知)

    第一种: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);

    最后运行也是一样的

    两种方法各有差异第一种推荐使用,第二种代码量比较少,看个人喜号

  • 相关阅读:
    数据库备份 DBS(Database Backup),知识点
    关系型数据库 RDS(Relational Database Service),知识点
    对象存储服务 OSS(Object Storage Service),知识点(待补充上仓库代码)
    Java 为什么需要包装类,如何使用包装类?
    for each 语句
    缓存中,2个注解:@cacheable 与 @cacheput 的区别
    微信小程序,相关代码
    微信小程序中的事件
    通俗易懂:索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系
    MySQL 的各种 join
  • 原文地址:https://www.cnblogs.com/chaowang/p/6110076.html
Copyright © 2011-2022 走看看