Android 适配器教程(三)

前两讲中,我们分别大体的了解了适配器是什么,和它的一些基本知识。

并且分别讲解了了ArrayAdapterSimpleCursorAdapter这两种常用的安卓原生适配器,这两种适配器都是封装好了的,他们虽然使用起来非常简单,但是可扩展性较差。

现在我们继续向下深入学习安卓的适配器,这一次我们将会一同学习SimpleAdapter

simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等,当然也有它做不到的事情,这些我们后来再说。

tip:有些代码继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。我们还是继承自普通的Activity。

下面我们要写的实例程序是实现一个带有图片的类表。当然会用上SimpleAdapter

程序开始!

(1)也还是先在activity_main.xml里添加一个button,一会跳转的时候使用。

(2)然后新建一个类SimpleAdapterDemo继承自Activity作为我们第三个例子的Activity,@Override 我们的onCreate方法。

(3)新建一个xml文件simpleadapterdemo.xml作为我们的布局文件,其中也是包含一个文本域和一个ListView:

代码如下:

simpleadapterdemo.xml:

<?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="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是simpleadapter的一个例子" >
    </TextView>

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

</LinearLayout>

注意啦!这里和前两次可有区别啦:

(4)我们需要定义好一个用来显示每一个列内容的xml

listitem1.xml 包含横向的图片与文字,这里可扩展性就体现出来了哦!

我们完全可以定义每一列的内容了,比如我可以让每一列都是图片并在图片下面加文字。

代码如下:

listitem1.xml

<?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" >

    <ImageView android:id="@+id/imgview1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_margin="5px"/>

    <TextView android:id="@+id/text1"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:textColor="#000000"
			android:textSize="22px"
			android:layout_margin="5px"/>

    <TextView android:id="@+id/text2"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:textColor="#000000"
			android:textSize="15px"
			android:layout_margin="5px"/>

</LinearLayout>

(5)还是再回到SimpleAdapterDemo,定义一个Listview暂且叫做lv,并使用刚才的ID,setContentView()为刚才的xml布局,然后为lv设置一个适配器:

 

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局listitem1.xml

下面做适配,new一个SimpleAdapter

SimpleAdapter adapter = new SimpleAdapter(this,data,
resource,from, to);

参数依次是:this,HashMap的 title和
info,布局文件(listitem1.xml),至于from和to,有木有很熟悉,对我们上一篇刚刚使用过了:From是你查询出的数据,to是单行布局中的单独控件,一对一的关系,用起来非常方便。布局文件的各组件分别映射到HashMap的各元素上,完成适配。

下面是具体代码:

 

package com.example.adapterdemo;

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 SimpleAdapterDemo extends Activity {
	private ListView lv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.simpleadapterdemo);
		lv = (ListView) findViewById(R.id.simpleadapterdemolistview);

		SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.listitem1,
				new String[] { "text1", "text2", "img" }, new int[] {
						R.id.text1, R.id.text2, R.id.imgview1});

		lv.setAdapter(adapter);
	}

	public  List<Map<String, Object>> getData(){
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("text1", "Image1");
		map.put("text2", "info1");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image2");
		map.put("text2", "info2");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image3");
		map.put("text2", "info3");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image4");
		map.put("text2", "info4");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image5");
		map.put("text2", "info5");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image6");
		map.put("text2", "info6");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image7");
		map.put("text2", "info7");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("text1", "Image8");
		map.put("text2", "info8");
		map.put("img", R.drawable.ic_launcher);
		list.add(map);
		return list;

	}
}

最后又是看结果的时候了:

效果图:

这样三种常用的安卓原生适配器就算讲完了,随着一步步的学习,相信大家对适配器的使用已经比较有心得了。大家有没有发现我们所使用的适配器威力越来越大,当然实现过程也更加繁琐一些。

还有一些安卓的原生适配器,我们就杀鸡儆猴的学习了用的最多的三个原生适配器,其他的也就是小菜了,接下来我们就要自定义适配器了,自定义的适配器能适应更多的情况,功能更加强大,当然也需要我们更加深入的学习才能应用自如,请大家不要错过哦!

源码我会在最后一篇写完的时候一并上传,以内我也是边写博客边写代码,这样我觉得思路清晰一些。

我也是学生,水平有限,还请多多指教~

Android 适配器教程(三),布布扣,bubuko.com

时间: 2024-08-01 06:21:16

Android 适配器教程(三)的相关文章

Android 适配器教程(一)

最近在开发安卓的过程中发现ListView无疑是一个经常使用的组件,而提到ListView又不得不提一下适配器了,我打算用几个实例,由浅入深的向大家仔细讲解一下适配器的使用,虽然这算不上什么高深的问题,我还是希望能给大家带来一些收获,我也是菜鸟一只,写的不好的或者有错的地方还请大家帮忙指出.下面进入正文: 首先让我们来认识一下适配器: 什么是适配器呢?顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示.适配器就像显示器,把复杂的东西按人可以接受的方式来展现.也可以这样来理解适配器,L

Android 适配器教程(五)

在之前四讲中,我们已经由浅入深的认识了适配器,从最简单的ListView写起,最后完成了自定义适配器的简单例子,这一次咱们就上次留下来的问题 再进行更加深入的学习,主要是getView方法的原理,还有Holder的使用,还有关于ListView性能方面的优化问题.自定义适配器这一部分需要好好的进行理解,只有真正理解的比较透彻,写起来才会比较顺手.这一次就没有例子了,我会配上几张图片,希望能让大家看得明白. 先从ListView的原理来进行讲解吧! 大家先看一张图: 这就是ListView的工作原

Android 适配器教程(二)

上次我写了一个类似前言的东西,向大家粗略介绍了一下什么是适配器,并且举了一个最简单的例子帮助大家理解,使用了安卓原生的ArrayAdapter,现在我们继续向下学习,同时也继续在我们上次的Demo项目中继续添加例子,一步步的向下深入学习. 这次要讲解的是另外一个常用的安卓原生适配器-SimpleCursorAdapter: 关于SimpleCursorAdapter,sdk的解释是这样的: An easyadapter to map columns from a cursor to TextVi

Android 适配器教程 (六)

我们的适配器学习已经接近尾声了,虽然这不是一个大问题,但是确实是值得学习的一块知识,回想一下之前五讲的知识,我们已经学到了很多东西了. 在之前五讲中,我们已经由浅入深的认识了适配器,从最简单的ListView写起,最后完成了自定义适配器的简单例子,然后又为大家讲解了ViewHolder和settag在自定义适配器中的应用,帮助大家理解了getView方法,还讲解了关于ListView性能方面的优化问题.自定义适配器这一部分是我们这次学习真正的重点,很多问题可以用安卓原生适配器进行解决,但是也有很

Android OpenGL教程 三 3D随便画画

画个三棱椎需要四个点,画四个面 private float[] mTriangleArray={ -1.0f,-1.0f,0.0f, 1.0f,-1.0f,0.0f, 0.0f,1.0f,0.0f, 0.0f,0.0f,1.0f }; // 定义三棱椎的4个顶点的颜色 private float[] mColor={ 1.0f,0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f,0.0f, 0.0f,0.0f,1.0f,0.0f, 1.0f,1.0f,0.0f,0.0f, }; pri

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的! 二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人:QQ508181017 核心代码如下 1.数据库操作类 package com.icq.demo.db; import java.util.ArrayList;

Android 性能优化 三 布局优化ViewStub标签的使用

小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说可以用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件.(更多详细的API等信息可以查看官方文档ViewStub),计算机行业一向是实践里面出真知,下面用一个例子演示下效果. 小黑:说说概念只是为了概括性的了解下,还是用个实例来演示下.先来创建一个Activity中使用的布局文件,文件名是:act

Android手机令牌教程

Android手机令牌教程 "沉下心,你不再是小孩子了.多看书,学做人"-JeffLi告诉自己 Written In The Font 花了一个天一夜,搞了这个小东西-安卓手机令牌.事实上,我这边分享,看网上东西也没多少.这就分享了.由于这个会给公司用.有些东西就不方便透露了.希望大家体谅.还有假设须要找我沟通,加群吧!在页面中会有三处出现. Android手机令牌 界面 java 与  C#服务端交互 倒计时和顺计时技术 口令生成 Content android 也不难学,承认花了时