安卓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);
最后运行也是一样的
两种方法各有差异第一种推荐使用,第二种代码量比较少,看个人喜号
安卓ListView操作的两种方法的更多相关文章
- spark-sql将Rdd转换为DataFrame进行操作的两种方法
SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...
- WCF 客户端调用服务操作的两种方法
本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法!!!
在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...
- Linux 下操作GPIO(两种方法,驱动和mmap)(转载)
目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...
- JqueryMobile动态生成listView并实现刷新的两种方法
本篇文章主要是对JqueryMobile动态生成listView并实现刷新的两种方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JqueryMobile动态生成listView并实现刷新 ...
- Linux 下操作gpio(两种方法,驱动和mmap)
目前我所知道的在linux下操作GPIO有两种方法: 1. 编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据 ...
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...
- 代码操作Word时,目录自动更新的两种方法
最近的项目中有一个功能点为:根据分析数据库并生成报告.不过不是大数据.数据挖掘之类,报告的内容.组织方式都是事先固定下来的.实现的方式为,在普通word文档中插入书签制成模板,然后程序使用OpenXM ...
- PyQt(Python+Qt)学习随笔:model/view架构中支持QListView列表中展示图标的两种方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QListView列表视图中的项不但可以展示文字,也可以展示图标和复选框,同时可以指定项是否可以拖 ...
随机推荐
- java中的继承要点
java的一大特性既是:继承. 1.因为有了一个子类继承了一个父类,才有了后面的多态. 2.类的继承,不要为了节省代码,为了继承而继承,把那个没有任何相关的类链接在一起,继承必须用在 is a,就是例 ...
- 生成器模式(Builder)
1.本质:分离整体构建算法和部分构造 2.示意图: 3.功能: 构建复杂的产品,而且是细化的.分步骤的构建产品 分离构建算法和具体的构建实现 具体的构造实现可以方便的切换和扩展 4.优点: 1.松散耦 ...
- smarty中判断一个变量是否存在于一个数组中或是否存在于一个字符串中?
smarty支持php的系统函数可以直接使用{if in_array($str, $arr) || strpos($str, $string)} yes {else} no{/if}
- Vim的学习心得
现在的工作是在unix平台,平时是用UE的ftp功能来写代码的,有时候文件大了,传输就很慢,而且经常不是很稳定.下定决心要学学Vim(现在应该没有人用原始的vi了吧),在经过二周的使用后,发现Vim实 ...
- C题 - A+B for Input-Output Practice (II)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description You ...
- Scut AccountServer
开始以Scut搭建服务器框架: 1. 初始目录结构: libs 存放 scut 的引擎文件: release 存放 src 输出的文件: src 存放各子工程源文件: 2. Install.bat:目 ...
- Zephyr-开发流程
开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 : 物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...
- 转:关于数据库压缩技术的Survey
原文来自于:http://outofmemory.cn/mysql/database-compression-tech 昨天给团队内的小伙伴做了一个关于数据库压缩技术的Survey,现将其中可以公开的 ...
- Flux
Ken Wheeler 构建React 应用的一套架构. 应用程序架构, 单向数据流方案. Dispatcher 的开源库. 一种全局pub/sub 系统的事件处理器, 用于 向所注册的加调函数 ...
- Sereja and Suffixes
Codeforces Round #215 (Div. 2) B:http://codeforces.com/problemset/problem/368/B 题意:给你一个序列,然后查询i--n中没 ...