Android UI ListView的使用
一、ListView的理解
1.什么ListView?
一种用来显示多个可滑动项(Item)列表的的ViewGroup
需要使用Adapter将集合数据和每一个Item所对应的布局动态适配到ListView中显示
显示列表: listView.setAdapter(adapter)
更新列表: adapter.notifyDataSetChanged()
二、实现ListView的三种常用方式
1、ArrayAdapter应用
ArrayAdapter(Context context,int resource,T[] objects)
ArrayAdapter(Context context,int resource,List<T> objects)
context:上下文对象,一般为Activity对象
resourcce:Item的布局文件标识
objects:需要显示的数据集合
2.案例
1.创建一个 layout xml文件
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> </ListView>
2.创建 layout 文件 布局 ListView 子元素 items
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="20sp"
android:gravity="fill_vertical"
android:id="@+id/item_adapter" >
</TextView>
3. 代码实现
package com.example.android_ui_listview; import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter); // 初始化控件
ListView adapter_lv = (ListView) findViewById(R.id.listView1);
// 1.准备集合数据
String[] strs = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "09",
"89", "77", "55", "ut", "sd", "gj", "gjk", "qw", "jhk" };
// 2.准备ArrayAdapter对象
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.adapter_item, strs);
// 3.设置Adapter显示列表
adapter_lv.setAdapter(adapter);
}
}
效果:

2、SimpleAdapter应用
SimpleAdapter(Context context,List<? entends Map<String,?>> data,int resource,String[] from,int[] to)
context:上下文对象,一般为Activity对象
data:需要显示的数据集合
resource:Item布局文件的标识
from:Map对象的Key的数组,用于得到对应的value
to:Item布局文件中的子View的id的数组
1).创建 layout
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> </ListView>
2). item 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/simple_adapter"> <ImageView
android:id="@+id/siple_iv"
android:layout_width="60dp"
android:layout_height="70dp"
android:src="@drawable/ic_launcher" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="69dp"
android:layout_marginRight="15dp"
android:gravity="center_vertical"
android:orientation="vertical"> <TextView
android:id="@+id/siple_tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/adapter_test" /> <TextView
android:id="@+id/siple_tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/adapter_number" />
</LinearLayout> </LinearLayout>
3)代码实现
package com.example.android_ui_listview; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter);
// 初始化控件ListView
ListView listView = (ListView) findViewById(R.id.listView1) ; //1.准备数据
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ;
for(int i=0;i<10;i++){
Map<String,Object> map = new HashMap<String,Object>() ;
// key对应的from数组
map.put("siple_iv", R.drawable.ic_launcher) ;
map.put("siple_tv1", "价格:"+(i*3+0.1)) ;
map.put("siple_tv2", i+100) ;
list.add(map) ;
} //2.准备SimpleAdapter对象
// 准白
String[] from = { "siple_iv", "siple_tv1", "siple_tv2" };
// 对应 Item 子样式 里面控件的id
int[] to = { R.id.siple_iv, R.id.siple_tv1,R.id.siple_tv2} ;
SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,R.layout.siple_adapter, from, to) ; //3.添加到listView里面
listView.setAdapter(simpleAdapter) ;
}
}
4).

3、BaseAdapter(抽象类)应用
public view getView(int position,View converView,ViewGroup parent)
返回指定下标所对应的item的View对象
position:下标
converView:可复用的缓存Item视图对象,前n+1个为null
parent:ListView对象
1.layout xml配置
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> </ListView>
2.ListView子元素 item 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/simple_adapter"> <ImageView
android:id="@+id/siple_iv"
android:layout_width="60dp"
android:layout_height="70dp"
android:src="@drawable/ic_launcher" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="69dp"
android:layout_marginRight="15dp"
android:gravity="center_vertical"
android:orientation="vertical"> <TextView
android:id="@+id/siple_tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/adapter_test" /> <TextView
android:id="@+id/siple_tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/adapter_number" />
</LinearLayout> </LinearLayout>
3.创建一个简单实体类
package com.example.android_ui_listview;
public class ShopInfo {
private int image ; //图片
private String sname ; //名称
private String price ; //价格
public ShopInfo() {
super();
}
public ShopInfo(int image, String sname, String price) {
super();
this.image = image;
this.sname = sname;
this.price = price;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
4.activity实现
package com.example.android_ui_listview; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity {
List<ShopInfo> list ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter); // 初始化 ListView
ListView listView = (ListView) findViewById(R.id.listView1) ; // 1.准备数据
list = new ArrayList<ShopInfo>() ;
for(int i=0;i<100;i++){
ShopInfo s = new ShopInfo(R.drawable.ic_launcher,"名称:Android"+(i+1)+"号","价格:"+(i*12)+"$") ;
list.add(s) ;
} // 2.准备BaseAdapter对象
MyBaseAdapter baseAdapter = new MyBaseAdapter() ; // 3.添加listView里面
listView.setAdapter(baseAdapter) ;
} class MyBaseAdapter extends BaseAdapter{
// 返回集合数据的数量
@Override
public int getCount() {
return list.size();
}
//返回指定下标对应的数据对象
@Override
public Object getItem(int position) {
return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
/**
*
* 返回指定下标对应的item的view对象
* position:下标
* convertview:可重复利用的控件
* parent:ListView对象
* */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//加载item的布局,得到View对象
if(convertView == null){ //如果直接创建,很有可能照成应用崩毁
convertView = View.inflate(MainActivity.this, R.layout.siple_adapter, null) ;
}
//根据position设置对应的数据
//得到当前行的数据对象
ShopInfo s = list.get(position) ;
//得到子view对象
ImageView imageView = (ImageView) convertView.findViewById(R.id.siple_iv) ;
TextView tv1 = (TextView) convertView.findViewById(R.id.siple_tv1) ;
TextView tv2 = (TextView) convertView.findViewById(R.id.siple_tv2) ;
// 设置资源
imageView.setImageResource(s.getImage()) ;
tv1.setText(s.getSname()) ;
tv2.setText(s.getPrice()) ; return convertView;
} }
}
实现效果

总结: SimpleAdapter 和 BaseAdapter 很类似
SimpleAdapter是把数据存放在Map中,根据from 和to 对应的
BaseAdapter是把数据存放到自己定义的Pojo中 在根据继承BaseAdapter 实现里面的抽象方法
Android UI ListView的使用的更多相关文章
- Android UI:ListView -- SimpleAdapter
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便. layout : <?xml version="1.0" encoding=&qu ...
- [Android UI] listview 自定义style
<style name="comm_listview_style"> <item name="android:cacheColorHint"& ...
- Android UI组件----ListView列表控件详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Android UI组件----自定义ListView实现动态刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)
Android UI学习 - ListView -- :: 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
- android UI进阶之实现listview的分页加载
上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一 下子全部加载用户未读的微薄这将耗费比较长的时间,造成 ...
- android UI进阶之实现listview的下拉加载
关于listview的操作五花八门,有下拉刷新,分级显示,分页列表,逐页加载等,以后会陆续和大家分享这些技术,今天讲下下拉加载这个功能的实现. 最初的下拉加载应该是ios上的效果,现在很多应用如新浪微 ...
- android UI进阶之实现listview中checkbox的多选与记录
今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个 清单页面,我们需要记录用户勾选了哪些条目.这个的实现并 ...
- 【转】android UI进阶之实现listview中checkbox的多选与记录--不错
原文网址:http://www.cnblogs.com/notice520/archive/2012/02/17/2355415.html 今天继续和大家分享涉及到listview的内容.在很多时候, ...
随机推荐
- MVC5 网站开发实践 2、后台管理
目录 MVC5 网站开发实践 概述 MVC5 网站开发实践 1.建立项目 从这一部分开始做后台管理,首先是基本框架的 一.Data项目 1.项目添加EntityFramework引用 在Data项 ...
- 配置 L3 agent - 每天5分钟玩转 OpenStack(99)
上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...
- Android重写菜单增加系统自带返回键
条件:当前项目导入了ActionBarSherlock这个jar包,这个jar包的作用为了程序的兼容性,考虑低版本的问题. 学习ActionBarSherlock参考博客链接:http://blog. ...
- PHP程序员如何理解IoC/DI
思想是解决问题的根本 思想必须转换成习惯构建一套完整的思想体系是开发能力成熟的标志 详情请点击
- MySQL参数
1. sql_safe_updates 官方解释如下: , MySQL aborts . 默认为0,如果设置为1,则delete操作和update操作必须带有where子句,且where子句中的列必须 ...
- [ES] 安装
1.ElasticSearch安装的准备工作 Linux:CentOS6.4 Elasticsearc:elasticsearch-2.2.0 JDK:jdk-7u79-linux-x64 IK:1. ...
- Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- 编写高质量代码:改善Java程序的151个建议(第2章:基本类型___建议26~30)
建议26:提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中.而在Java5中泛型更是 ...
- [Asp.net 5] Localization-简单易用的本地化
本地化也叫国际化,就是做多语言程序时,可以一键式将当前语言切换到另外一种语言.对于跨国企业或者和国外有业务往来的公司特别重要:就算一个普通公司的门户如果支持中.英.繁体,也会让人觉得高大上.有没有呀, ...
- Visual Studio.NET单选题
在Visual Studio.NET窗口中,在__________窗口中可以察看当前项目的类和类型的层次信息. A. 解决方案资源管理器 B. 类视图 C. 资源视图 D. 属性 在线答题:http ...