文档章节

ListView学习(1)-SimpleAdapter的学习

c
 chuiyuan
发布于 2014/05/07 20:37
字数 1027
阅读 429
收藏 3

注意:

(1) 在Spinner 中监听 用 selected , 在ListView 中用 click。

一。首先是xml文件

    这里公两个部分,一是主要 的listview.xml,一是子项的XMl文件,item.xml

(1) listview.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

(2) item.xml 

    两个部分,图片和文字 。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_menu_edit" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>


二。java部分

步骤:

(1)得到ListView 对象 

(2)将原始数据转换成Adapter 要的数据结构。这个 是使用Adapter  中的一个难点 。

(3)新建Adapter 对象 。选择很多,可以自定义 ,这里先用简单点的,SimpleAdapter类,构造方法为:

SimpleAdapter (Context context ,
                    List<? extends Map<String ,?> >data ,
                    int resource,
                    String [] from,
                    int [] to );

参数二:数据源,键 一定要是String , 值 常常也是用的String 。

参数三:资源 的 Id ,也就是每个子项的布局文件(如item.xml的id )。

参数四:数据源(第二个参数)中的 KEY ,通过 这个 得到数据源中的 value ./

参数五:item.xml 文件中 要显示数据 的地方 的 Id ,如上面 的就是textView1 .

(4) 为 ListView 配置Adpater 

ListView.setAdapter (ListAdapter adapter );


 三。下面开始实例 :

原始安徽据源:String [ ] names

Adapter 要用的数据源的格式 :  List <HashMap<String  ,String >> listItem .   这里不能写成  Map

难点在于怎么将原始数据源转换成  Adapter  可用的数据 源。

可以 将names[i]一个个保存到 一个HashMap name 中,然后将这个 HashMap 加入 到  listItem 中。

(1)下面是整体架构 

public class ListDemo extends Activity {
	private String[] names ;      //原始 数据 源
	private List<HashMap<String, String>> listItem ;  //adapter要用的格式 的数据 源
	private ListView lv ;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listview);		
		
		loadData();   //还有产生Adapter 要的结构的数据。
		initCtrl ();  //初始化组件 ,
		
		lv.setOnItemClickListener(new OnItemClickListener(){
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id ) {
				Toast.makeText(getBaseContext(), names[position], Toast.LENGTH_SHORT).show();
			}	
		});
		
	}

注意,这里用Click,而不是 Selected 严密监听。

(3) loadData() 可以 原始 数据 整理成Adapter 要的格式 

private List<HashMap<String, String>> loadData() {
		// TODO Auto-generated method stub
		names = new String []{"android 1.1","android 2.1","android 3.1","android 4.1"};
		listItem = new ArrayList <HashMap<String ,String >>();
		
		for (int i=0;i< names.length;i++){
			HashMap <String ,String > name = new HashMap<String ,String >();
			name.put("name", names[i]);
			listItem.add(name);
		}
		return listItem ;
	}

(3) initCtrl()  中完成 了组件 的初始化和设置 ,

private void initCtrl() {
		// TODO Auto-generated method stub
		lv= (ListView)findViewById(R.id.listView1);   //得到 ListiV	iew
		SimpleAdapter adapter = new SimpleAdapter (getBaseContext(), 
													listItem ,
													R.layout.item,
													new String []{"name"},
													new int [] {R.id.textView1});    //新建 Adapter 
		lv.setAdapter(adapter);
	}




下面开始 讲复杂的listItem的。

    还是用   SimpleAdapter 。

SimpleAdapter (Context context ,
                    List<? extends Map<String ,?> >data ,
                    int resource,
                    String [] from,
                    int [] to );

我们为了显示 下面的效果:

作出下面的修改:

一。item  的布局文件,用两层的 linearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:background="#808080"
    android:orientation="horizontal" 
    >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_margin="5dp"
        android:src="@drawable/a"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" 
         android:layout_marginLeft="20dp"
        android:orientation="vertical">
        
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:textColor="#FFFFff"
            android:textSize="20sp"
            android:text="name"/>

        <TextView
            android:id="@+id/info"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="info"
            android:textColor="#FFFFff"
            android:textSize="15sp" />
        
    </LinearLayout>

</LinearLayout>

二。java 程序 的修改

    将 Adapter 要用的数据 类型改成

private List<Map<String, Object>> listItem ;  //adapter要用的格式 的数据 源

其它各处都 要进行修改。

初始化部分改成:

private void initCtrl() {
		// TODO Auto-generated method stub
		lv= (ListView)findViewById(R.id.listView1);   //得到 ListiV	iew
		SimpleAdapter adapter = new SimpleAdapter (getBaseContext(), 
													listItem ,
													R.layout.item,
													new String []{"name","img","info"},
													new int [] {R.id.name,R.id.imageView1, R.id.info});    //新建 Adapter 
		lv.setAdapter(adapter);
	}


重点难点 在数据加载 部分,

private List<Map<String, Object>> loadData() {
		// TODO Auto-generated method stub
		names = new String []{"android 1.1","android 2.1","android 3.1","android 4.1"};
		imgs = new int []{R.drawable.a, R.drawable.b,R.drawable.c, R.drawable.d};
		infos =new String [] { "1991","1992","1993", "1994"};
		
		listItem = new ArrayList <Map<String ,Object >>();
		
		for (int i=0;i< names.length;i++){
			Map<String, Object> map = new HashMap<String ,Object >();
			map.put("name", names[i]);
			map.put("img",imgs[i] );
			map.put("info", infos[i]);
			
			listItem.add(map);
		}
		return listItem ;
	}







© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/374.html ListView :在Android应用开发过程中属于最常用的系统组件之...

迷途d书童
2012/03/19
0
0
android学习之ListView总结

ListView总结 在原来的基础上,增加了点击后的消息响应函数。 源代码下载:http://download.csdn.net/detail/nuptboyzhb/4484920 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。...

长平狐
2012/10/08
76
0
listview与adapter用法

一个ListView通常有两个职责: (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非...

ARESXIONG
2015/11/03
0
0
Android软件开发之ListView 详解 (十一)

Android软件开发之ListView 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6636139 ListView的使用方法 ListView...

彭博
2012/03/09
292
0
Android软件开发之ListView 详解 (十一)

Android软件开发之ListView 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6636139 ListView的使用方法 ListView...

晨曦之光
2012/03/07
209
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 乱七八糟的可重复读隔离级别实现

MySQL 乱七八糟的可重复读隔离级别实现 摘要: 原文可阅读 http://www.iocoder.cn/Fight/MySQL-messy-implementation-of-repeatable-read-isolation-levels 「shimohq」欢迎转载,保留摘要,谢...

DemonsI
45分钟前
2
0
Spring源码阅读——2

在阅读源码之前,先了解下Spring的整体架构: 1、Spring的整体架构 1. Ioc(控制反转) Spring核心模块实现了Ioc的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描...

叶枫啦啦
今天
1
0
jQuery.post() 函数格式详解

jquery的Post方法$.post() $.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 data(可选):发送给后台的...

森火
今天
0
0
referer是什么意思?

看看下面这个回答(打不开网页可以把网址复制到搜索栏): https://zhidao.baidu.com/question/577842068.html

杉下
今天
1
0
使用U盘安装CentOS-解决U盘找不到源

1. 使用UltraISO制作CentOS安装盘 如果需要安装带界面的系统,为保证安装顺利,可选择Everything版本的ISO制作安装盘。 2. 在BIOS中选择使用U盘安装 系统启动后,进入安装选择界面,其中有三...

Houor
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部