在ArrayAdapter中,数据源一般是数组,而在SimpleAdapter中,数据源是List<Map<String,Object>>,这里不再对一些定义进行描述,根据下面的例子,我相信可以更好得掌握它的用法。

一.构造函数:public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to);第一个参数:上下文对象;第二个参数:数据源,第三个参数:适配器控件中每个条目对应的布局文件;第四个参数:数据源中Map集合中的key的集合;

第五个参数:布局文件中控件Id的集合。

二.我们还是以ListView和SimpleAdapter为例,了解它的用法;

1.在布局文件中添加一个ListView控件,代码如下:
<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">


     <ListView
         android:id="@+id/listView_persons"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_below="@+id/textView1"
         android:layout_toRightOf="@+id/textView1" >
     </ListView>

 </RelativeLayout>2.由于这里使用SimpleAdapter,而它的第三个参数是需要一个布局文件,这个布局文件指定了他每个条目的样式,所以,在res下的layout中新建一个布局文件,名为layout_item,并设置某些属性,代码如下:
<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >

     <TextView
         android:id="@+id/textView_name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignParentTop="true"
         android:layout_marginRight="106dp"
         android:layout_marginTop="15dp"
         android:text="姓名" />

     <TextView
         android:id="@+id/textView_age"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/textView_name"
         android:layout_below="@+id/imageView_head"
         android:text="年龄" />

     <ImageView
         android:id="@+id/imageView_head"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_below="@+id/textView_name"
         android:layout_marginLeft="31dp"
         android:src="@drawable/ic_launcher" />

    

 </RelativeLayout>

3.给ListView中添加数据,用setAdapter(),并添加点击事件,这在里,我们根据它的提示,需要什么,我们就给它什么,所有的代码如下:public class MainActivity extends Activity {

     private List<Map<String,Object>> data;//声明数据源,并在getData()方法中给它赋值
     private ListView listView01;
     private SimpleAdapter adapter=null;//声明SimpleAdapter。
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         data=getData();
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         listView01=(ListView) findViewById(R.id.listView_persons);
         adapter=getAdapter();//为了代码结构清晰,所以提取成一个方法
         listView01.setAdapter(adapter);//给ListView中添加数据,这里需要一个Adapter,所以我们new一个Adapter
         listView01.setOnItemClickListener(new OnItemClickListener() {

             @Override
             /**
              * 添加点击事件
              * @param parent:事件源,当前的适配器控件;
              * @param view:当前的条目,用户点击了哪个条目,哪个就是view
              * @param position:当前条目的索引号
              * @param id:当前条目多对应的行数
              * @param
              */
             public void onItemClick(AdapterView<?> parent, View view,
                     int position, long id) {
                 //1.根据数据源获取数据
                 /*Map<String, Object> map=data.get(position);
                 String name=map.get("name").toString();*/
                 //2.根据适配器对象获取数据
                 //String name=((Map<String,Object>)adapter.getItem(position)).get("name").toString();
                 //3.根据适配器控件获取
                 //String name=((Map<String,Object>)parent.getItemAtPosition(position)).get("name").toString();
                 //4.根据形参view获取
                 TextView tv=(TextView) view.findViewById(R.id.textView_name);
                 String name=tv.getText().toString();
                 Toast.makeText(getApplicationContext(), "name="+name, Toast.LENGTH_SHORT).show();
                 
             }
         });
     }


     private List<Map<String, Object>> getData() {
         data=new ArrayList<Map<String,Object>>();
         /**
          * 在drawable文件夹中的图片,由于名字是按顺序的,所以在R文件中生成的id也是有规律的,每次都加1,
          * 所以可以用for循环,添加到Map集合中
          */
         for(int i=0;i<6;i++){
             Map<String,Object> maps=new HashMap<String,Object>();
             maps.put("header",R.drawable.tou1+i );
             maps.put("name","张三"+i);
             maps.put("age",21+i);
             data.add(maps);
         }
         return data;
     }
     /**
      * 
      * @return
      */
     private SimpleAdapter getAdapter() {
         adapter=new SimpleAdapter(this, //上下文对象
                 data, //数据源
                 R.layout.activity_layout,//当前控件中每个条目对应的布局文件
                 new String[]{"header","name","age"},  //数据源中Map集合中的Key值的集合
                 new int[]{R.id.imageView_head,R.id.textView_name,R.id.textView_age});//当前控件中每个条目对应的布局文件中控件的id的集合
         return adapter;
     }

 }

4.完成后,运行效果如下:如果做到这一步,说明最基本的用法已经掌握了,随着以后和其他知识的结合,慢慢的就融会贯通了!

android baserecyclerviewadapterhelper4 教程_控件