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的内容.在很多时候, ...
随机推荐
- 深入理解javascript描述元素内容的5个属性
× 目录 [1]innerHTML [2]outerHTML [3]innerText[4]outerText[5]textContent 前面的话 <p>This is a <i& ...
- 配置 L3 agent - 每天5分钟玩转 OpenStack(99)
上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...
- 解析Exception和C#处理Exception的常用方法总结
在.NET中,异常是指成员没有完成它的名称宣称可以完成的行动.在异常的机制中,异常和某件事情的发生频率无关. 异常处理四要素包括:一个表示异常详细信息的类类型:一个向调用者引发异常类实例的成员:调用者 ...
- jdk线程池主要原理
本文转自:http://blog.csdn.net/linchengzhi/article/details/7567397 正常创建一个线程的时候,我们是这样的:new thread(Runnable ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- 史上最全的Ajax基础详解
同步请求和异步请求 先解释一下同步和异步的概念: 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯 ...
- MVC学习系列13--验证系列之Remote Validation
大多数的开发者,可能会遇到这样的情况:当我们在创建用户之前,有必要去检查是否数据库中已经存在相同名字的用户.换句话说就是,我们要确保程序中,只有一个唯一的用户名,不能有重复的.相信大多数人都有不同的解 ...
- 基于Metronic的Bootstrap开发框架经验总结(10)--优化Bootstrap图标管理
在基于Bootstrap开发的项目中,鲜艳颜色的按钮,以及丰富的图表是很吸引人的特点,为了将这个特点发挥到极致,可以利用Bootstrap图标抽取到数据库里面,并在界面中进行管理和使用,这样我们可以把 ...
- .Net(c#)汉字和Unicode编码互相转换
{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...
- .Net(c#)模拟Http请求之HttpWebRequest封装
一.需求: 向某个服务发起请求获取数据,如:爬虫,采集. 二.步骤(HttpWebRequest): 无非在客户端Client(即程序)设置请求报文(如:Method,Content-Type,Age ...