Android从零开始(十)

知识点:适配器(Adapter)

Adapter有四种:
1、ArrayAdapter
2、SimpleAdapter
3、SimpleCursorAdapter
4、BaseAdapter


ArrayAdapter,SimpleAdapter,SimpleCursorAdapter都是BaseAdapter的子类,分别是数组适配器,简单适配器,和简单游标适配器。数组适配器用于适配单一的数据项,简单适配器用于适配多数据项的情况,比如每一个项是由2个文本,或是1个图片+2个文本组成,简单游标适配器用于适配数据库表的查询结果到视图中

在这里我们选择SimpleAdapter进行讲解:

首先我们看一下目录结构:

[img]http://dl.iteye.com/upload/attachment/0079/9749/b3b26b71-9962-30d2-b79a-bfb87ff2674b.png[/img]

步骤一:编写一个布局文件(用于存放每一个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" >


<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/city_sky_img"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:id="@+id/city_name"
android:layout_weight="1"
android:textSize="30sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/city_temperature"
android:gravity="bottom"
android:textSize="20sp"
/>


</LinearLayout>


步骤二:主布局文件(代码如下)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="SimpleAdapter" />
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/text_view"
></ListView>


</RelativeLayout>


步骤三、Activity的核心代码:
package com.veryedu.simpleadapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
/**
* @author 梦想家Dream
* 利用适配器显示一个图片+两个文本信息到一个ListView上
*/

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

String[] citys={"长沙","北京","上海","广州","南京","合肥",
"武汉","郑州","哈尔滨","长春","沈阳","天津",
"杭州","福州","南宁","昆明","南昌","石家庄",
"呼和浩特","乌鲁木齐","西安","西宁","兰州",
"银川","拉萨","重庆","成都","贵阳","海口","深圳",};

ListView list_view=(ListView)this.findViewById(R.id.text_view);
List data=new ArrayList();
Class cls=R.raw.class;
Random r=new Random();
try {
for (int i = 0; i < citys.length; i++) {

String name="a"+r.nextInt(32);
HashMap map=new HashMap();
map.put("sky", cls.getField(name).getInt(null)); //反射的方式获得图片
map.put("city", citys[i]);
map.put("temperature", r.nextInt(40)-10+"-"+(r.nextInt(40)-10)+"℃"); //随机生成一个温度(现实中这个是从网络上拿的)
data.add(map);
}

} catch (Exception e) {
Log.e("TAG", e.toString());
StackTraceElement[] stes=e.getStackTrace();
for(int i=0;i<stes.length;i++){
Log.e("TAG", stes[i].toString());
}
}

String [] from={"sky","city","temperature"};
int [] to={R.id.city_sky_img,R.id.city_name,R.id.city_temperature};

SimpleAdapter simpleAdapter=new SimpleAdapter(this, //你懂的,不解释
data, //你要显示的数据源
R.layout.list_view, //显示的目的地的Id
from, //数据源map的键(拿值放入到下面的相对应的位置中)
to); //数据源中的值的目标位置
list_view.setAdapter(simpleAdapter); // 设置适配器(其实就是将适配器中的数据设置到当前ListView中)

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}


通过以上操作就可以得到以下结果:

[img]http://dl.iteye.com/upload/attachment/0079/9752/40f19b27-bbcc-3fd7-8a8e-2a1c7337b881.png[/img]


总结:在数据展示中,我的理解是:不管是通过什么控件展示你的数据,你所要明白的是数据流,数据怎么样从数据库提炼然后展示到页面上的。这就类似于我在使用Jfreechart做报表的时候,它有核心工厂,主题样式,等等。我把这些类叫做工人,他们负责数据的美工,然后将数据完美的呈现给用户。其实我们在做程序开发的时候,把这些抽象的代码具体话,编写程序我们就会显得相对简单些,说白了,框架的实现,也就是我们现实具体的抽象。个人觉得将抽象的东西具体话会对我们代码的实现很有帮助,应该说是事半功倍吧,我是坚持这么做的···
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值