1.0 ListView三要素

1.0.1  创建基本步骤

1.在布局文件中创建一个ListView组件,并在Activity中声明这个组件。

2.在Activity中,创建一个合适的Adapter。

3.使用ListView的setAdapter(Adapter adapter),来设置成为ListView的Adapter。

1.0.2  不同的Adapter,不同的用法

1.ArrayAdapter

   1.1 创建ArrayAdapter

   ArrayAdapter arrayAdapter = new ArrayAdapter(Context context,int layout,T[] data);

   1.1.1 参数介绍

      context:上下文

      layout:布局资源ID

      data:数据集(也就是将要显示在ListView上每个Item的数据,在ArrayAdapter的构造方法里,是一个泛型的数组)

   1.1.2 使用ArrayAdapter

      使用listView.setAdapter(arrayAdapter)即可。

   1.1.3 ArrayAdapter是一种很简单的数据适配器。在这里已经粗略的介绍完毕了。

2.SimpleAdapter

  2.1 创建SimpleAdapter

    SimpleAdapter simpleAdapter = new SimpleAdapter(Context context,List list,int layout,String[] key,int[] ID);

    2.2.1 参数介绍

    context:上下文

    list:数据集合,一般使用ArrayList<HashMap<String,Object>> arrayList = new ArrayList<HashMap<String,Object>>();

    layout:Item布局资源ID

    key:map里面对应的key

    ID:layout里面的每一个组件ID(必须和key一一对应,位置相对一样)

    2.2.2 初始化参数

       list:使用map.put("key",对应的资源ID);

         layout:自定义的Item布局资源;

         key:new String[]{"key01","key02"};

       ID:new int[]{ID01,ID02};

    2.2.3 使用SimpleAdapter

       使用listView.setAdapter(simpleyAdapter)即可。

3.BaseAdapter

  3.1 创建BaseAdapter

    创建BaseAdapter和前者完全不同,它需要创建一个类去继承BaseAdapter类来进行创建。

    3.1.1 BaseAdapter类里的成员方法介绍

       3.1.1.1 成员方法概括

           getCount(),getItem(),getItemID(),getView();

       3.1.1.2 系统怎么调用BaseAdapter里的成员方法

           首先,我们在使用BaseAdapter的时候,最开始调用的是getCount()方法,该方法会返回整个ListView的条目数。然后调用getView来一一的创建每一个 Item。其中,getItem()和getItemID()是在获取数据的时候调用。

       3.1.1.3 convertView,viewHolder

           在getView()函数中,有一个convertView的参数。这个参数,相当于是ListView的可见Item的缓存。当用户进入界面的时候,ListView中有可见的Item时,convertView为null。如果,有Item不可见。那么,当用户进行滑动的时候,convertView便不再为null。首先,我们需要在converView为空的时候,将可见的Item通过viewHolder存入到convertView之中。然后,当用户滑动的时候,通过之前的setTag()方法给每个Item加上的Tag来获取Item。这样就可以节省系统的开销。

@Override
        public View getView(final int position, View convertView, ViewGroup parent) {
                ViewHolder viewHolder;
            Log.i("MyListViewBase", "getView " + position + " " + convertView);

            if(convertView == null){
                convertView = inflater.inflate(R.layout.item_simple,null);
                viewHolder = new ViewHolder();

                viewHolder.button = (Button) convertView.findViewById(R.id.item_btn);
                viewHolder.textView01 = (TextView) convertView.findViewById(R.id.item_textView_t);
                viewHolder.textView02 = (TextView) convertView.findViewById(R.id.item_textView_b);

                //设置tag,存放viewHolder
                convertView.setTag(viewHolder);
            }else{
                //convertView不为空时,,根据tag来获取viewHolder(快速获取,节省系统开销)
                viewHolder = (ViewHolder) convertView.getTag();
            }

            //获取数组里面特定位置的相对于key的值,并赋予给textView
            viewHolder.textView01.setText(getData().get(position).get("textView01").toString());
            viewHolder.textView02.setText(getData().get(position).get("textView02").toString());

            viewHolder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"你点击了"+(position+1)+"个按钮",Toast.LENGTH_SHORT).show();
                }
            });

            return convertView;
        }

  viewHolder的结构:

 private class ViewHolder{
        private TextView textView01;
        private TextView textView02;
        private Button button;
    }