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的内容.在很多时候, ...
随机推荐
- 创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
在 ML2 配置文件中 enable local network 后,本节将开始创建第一个 local network. 我们将通过 Web GUI 创建第一个 local network. 首先确保 ...
- 配置putty自动登陆服务器
putty是一款知名的SSH工具,可以用来登陆linux服务器,提供了终端.SSH是secure Shell的缩写.我之前也有一篇文章介绍这个话题:http://www.cnblogs.com/che ...
- Notepad++使用小结
还是那句话“工欲善其事必先利其器”用Notepad++也有一段时间了,也积累了一些东西,写篇博文与大家分享一下使用Notepad++的一些心得. 简单的说一下Notepad++是什么东西吧,Note ...
- CDH安装失败了,如何重新安装
1> 删除Agent节点的UUID # rm -rf /opt/cm-5.4.7/lib/cloudera-scm-agent/* 2> 清空主节点CM数据库 进入主节点的Mysql数据 ...
- [c++] Class
也是醉了,一个.h文件就有这么多细节问题: 初始化列表,使用{} 也可以. 类中的引用和const变量,必须立即在初始化列表中提前初始化. 常成员函数,const 放在函数后, 常成员函数即不能改变成 ...
- 为什么WebSphere好好的,他就不干活了?
“修理不好用的WebSphere,有时候要看运气.”这个是我接触过很过有历史的运维工程师经常说的一个梗;研发人员也经常说这个程序在我这里运行好好的,怎么到你那就不灵了?问题是你的,你自己解决. 声明一 ...
- Oracle数据库的SQL分页模板
在系统开发过程中,需要对数据进行查询,大部分情况下从数据库中查询的数据量比较大,在系统页面无法全部显示,而且查询全部的数据会影响系统的反应速度,需要对所查询的数据进行分页的查询操作,以此减轻系统的压力 ...
- ApiController使用Session验证出现Null解决方案
问题描述 在服务端保存登录信息,出现异常信息 分析发现HttpContext.Current.Session为null 解决方案 执行时出报异常,要在Global.asax里添加:开启Session功 ...
- react入门(4)
首先还是来回顾一下前三篇讲的内容 react入门(1): jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3 ...
- Objective-C 对象(内容根据iOS编程编写)
开发iOS程序需要使用 Objective-C 语言和Cocoa Touch框架.Objective-C 源于 C 语言,是 C 语言的扩展. Cocoa Touch框架是一个Objective-C类 ...