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的内容.在很多时候, ...
随机推荐
- ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】
到目前为止,我们定义的ServiceProvider已经实现了基本的服务提供和回收功能,但是依然漏掉了一些必需的细节特性.这些特性包括如何针对IServiceProvider接口提供一个Service ...
- Hawk 3.1 动态页面,ajax,瀑布流
不少朋友反映,Hawk的手气不错,好像没法处理动态页面.其实很容易,比其他软件都容易,让我慢慢道来. 1. 什么是动态页面 很多网站,在刷新的时候会返回页面的全部内容,但实际上只需要更新一部分,这样可 ...
- 窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型
有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac.非也,非也.如果你想了解或者初步学习Swift语言的话,你可以登录这个网站:http://swiftstu ...
- 窥探Swift编程之在Playground上尽情的玩耍
自从苹果公司发布Swift的时候,Xcode上又多了一样新的东西---"Playground".Playground就像操场一样,可以供我们在代码的世界里尽情的玩耍,在本篇博客中就 ...
- ZOJ Problem Set - 1240 IBM Minus One
水题不解释,就是注意下格式,没输出一行字符串记得加一个空白行 #include <stdio.h> #include <string.h> int main() { ; ]; ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(二)
一:页面静态化 几个概念: 静态网址:(比如:http://localhost/abc.html) 特点:1.利用seo(search engine optimization) 搜索引擎优化;2:访问 ...
- PHP实现实现数字补零格式化
在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001 先看看我的实现: <?php $IP = explode ( '. ...
- TCP滑动窗口机制
我们可以大概看一下上图的模型: 首先是AB之间三次握手建立TCP连接.在报文的交互过程中,A将自己的缓冲区大小(窗口大小)3发送给B,B同理,这样双方就知道了对端的窗口大小. A开始发送数据,A连续发 ...
- Sql Server函数全解(二)数学函数
数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...
- https问答篇
https问答 SSL和TLS有什么区别? 可以说,TLS是SSL的升级版本,SSL是网景公司设计的,为了最早期的网络安全而生,它的全名叫做"安全套接层".后来,IETF在1999 ...