文档章节

ListView学习(1)-SimpleAdapter的学习

c
 chuiyuan
发布于 2014/05/07 20:37
字数 1027
阅读 428
收藏 3
点赞 0
评论 0

注意:

(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
博文 91
码字总数 40993
作品 0
海淀
【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!

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

迷途d书童 ⋅ 2012/03/19 ⋅ 0

android学习之ListView总结

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

长平狐 ⋅ 2012/10/08 ⋅ 0

listview与adapter用法

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

ARESXIONG ⋅ 2015/11/03 ⋅ 0

Android软件开发之ListView 详解 (十一)

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

晨曦之光 ⋅ 2012/03/07 ⋅ 0

Android软件开发之ListView 详解 (十一)

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

彭博 ⋅ 2012/03/09 ⋅ 0

android学习笔记28--------------ListView详解

转载注明出处:袁方的技术博客 http://blog.csdn.net/yf210yf 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。 列表的显示需要三...

晨曦之光 ⋅ 2012/03/15 ⋅ 0

notifyDataSetChanged()方法刷新ListView

最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来。在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决方案...

chuiyuan ⋅ 2014/09/23 ⋅ 0

Android listview与adapter用法

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

OScoder2 ⋅ 2014/03/04 ⋅ 0

android学习摘记——自定义Adapter的心得

在ListView,GridView。。。。中经常用到适配器Adapter,但是anroid 提供的Adapter只是几种框架,如果我们有需求,还是要自己根据需求而自定义Adapter的 android提供的三种Adapter主要有Arr...

程序袁_绪龙 ⋅ 2014/11/09 ⋅ 0

ListView学习(2)-BaseAdapter 的学习

BaseAdapter   有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮。添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局...

chuiyuan ⋅ 2014/05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 10分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 20分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 21分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 22分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 29分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 31分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 32分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 33分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 33分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部