Android从零开始(十)
知识点:适配器(Adapter)
Adapter有四种:
1、ArrayAdapter
2、SimpleAdapter
3、SimpleCursorAdapter
4、BaseAdapter
ArrayAdapter,SimpleAdapter,SimpleCursorAdapter都是BaseAdapter的子类,分别是数组适配器,简单适配器,和简单游标适配器。数组适配器用于适配单一的数据项,简单适配器用于适配多数据项的情况,比如每一个项是由2个文本,或是1个图片+2个文本组成,简单游标适配器用于适配数据库表的查询结果到视图中
在这里我们选择SimpleAdapter进行讲解:
首先我们看一下目录结构:
步骤一:编写一个布局文件(用于存放每一个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>
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上 */@Overrideprotected 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中)}@Overridepublic 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;}}