1.创建一个工程 File-->new-->Android  Application Project

2.进入main_xxx.xlm文件  创建一个ListView控件

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

3.然后进入主Activity中

#1.声明一个ListView对象
      ListView listView;
声明一个数组对象.用来存储数据

#2.实例化ListView对象
listView = (ListView) findViewById(R.id.main_list_view);
实例化list对象
list = new ArrayList<Map<String,Object>>();

#3.利用for循环给list添加数据
for (int i = 0; i < 44; i++) {
//实例化Map对象  这一步必须写在for循环里.不然后面的数据会覆盖前面的数据
Map<String,Object> map = new HashMap<String, Object>();
//给map添加数据
map.put("name", "江一燕"+i);
map.put("img", R.drawable.ic_launcher);

把map添加到list里
list.add(map);
}

#4.接下来要创建一个MyAdapter的类继承BaseAdapter(我选用的是BaseAdapter)

4.接下来是在MyAdapter这个类里面操作

#1.继承BaseAdapter后,要重写BaseAdapter里面的方法鼠标移到MyAdapter上,选择第一个


public int getCount(){}

public Object getItem(int position) {}

public long getItemId(int position) {}

public View getView(int position, View convertView, ViewGroup parent){}

5.回到主Activity中

#1.实例化适配器 .传进去两个值1.上下文  2.list数据集合

 (注意)这里会报错,不用管,是因为MyAdapter中没有接收这两个值

6.切换到MyAdapter这个类中

#1声明两个对象,用来接收传过来的数据
Context context;
List<Map<String, Object>> list;

#2.创建一个构造函数来接收数据,

用快捷键Alt+Shift+S

跳出来的对话框中选择Generate Cstructor useing Fields...

勾选声明的两个变量 点ok


就会出现一个带两个参数的构造函数

public MyAdapter(Context context, List<Map<String, Object>> list) {
super();
//将传过来的上下文赋值给全局变量
this.context = context;
// 将传过来的数据赋值给全局变量
this.list = list;
}

#3.先把public int getCount(){}方法里面return值改成return list.size();

7.接下来很重要    都是在MyAdapter类中

      public View getView(int position, View convertView, ViewGroup parent){}方法里面操作

  #1.这里需要创建一个.xlm文件(这个文件里面的布局就是显示在ListView一条数据的样子)

         #2.因为从主Activity传过来的list中的map里面添加了一个TextVIew和一个ImageView值

         所以控件里创建一个TextView和一个ImageView

   <TextView
        android:id="@+id/item_text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


     <ImageView
        android:id="@+id/item_image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

#3.将布局文件通过View.inflate()方法转换成View类型
View view = View.inflate(context, R.layout.item, null);

#4.实例化布局文件里的控件,

这个布局里的控件是根据传数据过来的那个类都传了那些类型的数据,这个布局就创建那些控件
TextView textView = (TextView) view.findViewById(R.id.item_text_view);
ImageView imageView = (ImageView) view.findViewById(R.id.item_image_view);

#5.传数据的类已经将数据传到本类的list中了.

只需要取出来通过set方法改变新建的xlm上的控件上去

textView.setText(list.get(position).get("name").toString());

textView.setText方法动态改变控件显示的text文本 
* 通过list.get(position)拿到list的每个下标
* get("name")通过每个下标拿到对应的Key值.从而拿到map字面的键值
*  toString() 将拿到的数据转化成字符串类型

#6.动态set图片

imageView.setBackgroundResource((Integer) list.get(position).get("img"));
       
imageView.setBackgroundResource()方法动态改变控件的图片

* list.get(position).get("img")拿到下边所对应的Key值,从而拿到Map里的键值
* (Integer)强转成int类型

#7. 最后把这个方法里面的返回值一定要改成view

return view;