• 安卓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);

    最后运行也是一样的

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

  • 相关阅读:
    写给大忙人的spring cloud 1.x学习指南
    spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)
    Spring-Data-Redis下实现redis连接断开后自动重连(真正解决)
    写给大忙人的nginx核心配置详解(匹配&重写、集群、环境变量&上下文、Lua)
    javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 解决方法
    linux下配置nginx使用ftp目录作为静态资源文件的目标目录
    写给大忙人的centos下ftp服务器搭建(以及启动失败/XFTP客户端一直提示“用户身份验证失败”解决方法)
    linux下mysql 8.0安装
    写给大忙人的Elasticsearch架构与概念(未完待续)
    写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
  • 原文地址:https://www.cnblogs.com/chaowang/p/6110076.html
Copyright © 2020-2023  润新知