ListView 和 Adapter 适配器的简单介绍

1、ListView组件

存放数据的一个容器,显示在activity 上的。

2、Adapter 适配器

1)只有通过Adapter 才可以把列表中的数据映射到ListView 中。

2)种类:
ArrayAdapter,
BaseAdapter,
CursorAdapter ,
HeaderViewAdapter,
ResourceCursorAdapter,
SimpleAdapter,
SimpleCursorAdapter,
WrapperListAdapter

3)常用的三个:
ArrayAdapter SimpleAdapter BaseAdapter

3、ArrayAdapter示例

1)使用ArrayAdapter 可以实现简单的ListView 的数据绑定。
2)默认情况下,ArrayAdapter绑定每个对象的toString值 到layout 中 预先定义的TextView 控件上。
3)在xml 文件,添加layout 组件
这里写图片描述
4) 主程序代码:

package com.example.lum.arrayadapterlistview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private ListView mListView;
    //字符串组合
    private String [] data = {"item_One","item_Two","item_Three","item_Four",
            "item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到listview 组件
        mListView = (ListView) findViewById(R.id.lv_id);

        /**
         * 通过ArrayAdapter 将数据和布局联系起来
         * 参数1 当前上下文环境
         * 参数2 当前引用的布局 一般系统默认
         * 参数3 当前绑定的数据
         * */
        ArrayAdapter<String> array = new ArrayAdapter<String>(
                this,android.R.layout.simple_list_item_1,data);

        //将数据和布局 显示到列表
        mListView.setAdapter(array);
    }
}

5)运行结果显示
这里写图片描述

4、SimpleAdapyer 适配器示例

1)根据需要定义ListView 每个Item 所想要的布局
这里写图片描述
2)定义一个HashMap 构成的列表,将数据以 键值对的方式保存到里面
3)构造list 列表 ,存放 hashMap
4)构造 SimpleAdapter
5)将ListView绑定到 SimpleAdapter 上

package com.example.lum.arrayadapterlistview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

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

public class MainActivity extends AppCompatActivity {

    private ListView mListView;
    //字符串组合
    private String [] data = {"item_One","item_Two","item_Three","item_Four",
            "item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到listview 组件
        mListView = (ListView) findViewById(R.id.lv_id);

        //创建一个含有hanshMap 的列表集合
       List<HashMap<String,String>> data = new ArrayList<>();
       for(int i = 1; i <=18; i++) {    //创建 18  个 map 数据对象 ,每个map 对象 有两个键值数据
           //创建HashMap 对象,添加键值数据
           HashMap<String,String> map = new HashMap<>();
           //向map 对象添加两组键值对数据
           map.put("key_one","dataOne_" + i);
           map.put("key_two","dataTwo_" + i);
           //将 map 对象添加到data  集合
           data.add(map);
       }

        /**
         * SimpleAdapter 将数据和布局联系起来
         * 参数1 当前上下文环境
         * 参数2 当前绑定的数据
         * 参数3 当前引用的listView 的列表的布局
         * 参数4 String数组存储的map 的key
         * 参数5 int 数组保存的 组件的id
         *
         * 参数4 ,参数5 值是对应关系
         * */

       SimpleAdapter mSimpleAdapter = new SimpleAdapter(
               this,
               data,
               R.layout.listview_item,
               new String[]{"key_one","key_two"},
               new int[]{R.id.text_one,R.id.text_two});


       //将数据通过适配器显示到lv
       mListView.setAdapter(mSimpleAdapter);
    }
}

运行结果显示:
这里写图片描述

5、BaseAdapter 适配器示例

1)BaseAdapter 是开发中最常用的适配 ArrayAdapter, SimpleAdapter 都继承于BaseAdapter.
2)继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。
3)首先 getCount() 获取Item 的个数。
4) 每绘制一次就调用一次getView() 方法,在getView 中将事先定义好的layout布局确定显示的效果并返回一个View对象作为一个Item 显示出来。
5)getItem() getItemId() 调用ListView 的响应的方法的时候调用到。

  1. 创建一个listView item
    这里写图片描述

7)创建一个类 StudentData 用来方便实例化学生信息

package com.example.lum.arrayadapterlistview;

/**
 * Created by lum on 2018/5/27.
 */

public class StudentData {
    private String name;   //定义学生的姓名
    private int age;       //定义学生的年龄
    private int photo;    //定义学生的照片

    public  void  setName(String name) {
        this.name = name;
    }

    public String getName() {
        return  name;
    }

    public  void  setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return  age;
    }

    public  void  setPhoto(int photo) {
        this.photo = photo;
    }

    public int getPhoto() {
        return  photo;
    }
}

8)自定义适配器继承 BaseAdapter

package com.example.lum.arrayadapterlistview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by lum on 2018/5/27.
 */

public class MyListAdapter extends BaseAdapter {

    private List<StudentData> mStudentDataList;   //创建一个StudentData 类的对象 集合
    private LayoutInflater inflater;

    public  MyListAdapter (List<StudentData> mStudentDataList, Context context) {
           this.mStudentDataList = mStudentDataList;
           this.inflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return mStudentDataList == null?0:mStudentDataList.size();  //判断有说个Item
    }

    @Override
    public Object getItem(int position) {
        return mStudentDataList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //加载布局为一个视图
        View view = inflater.inflate(R.layout.listview_item,null);
        StudentData mStudentData = (StudentData) getItem(position);

        //在view 视图中查找 组件
        TextView tv_name = (TextView) view.findViewById(R.id.text_name);
        TextView tv_age = (TextView) view.findViewById(R.id.text_age);
        ImageView im_photo = (ImageView) view.findViewById(R.id.phone_id);

        //为Item 里面的组件设置相应的数据
        tv_name.setText(mStudentData.getName());
        tv_age.setText("age: "+ mStudentData.getAge());
        im_photo.setImageResource(mStudentData.getPhoto());

        //返回含有数据的view
        return view;
    }
}

9)主函数实现数据初始化 listView 显示

package com.example.lum.arrayadapterlistview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

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

public class MainActivity extends AppCompatActivity {

    private ListView mListView;
    //字符串组合
    private String [] data = {"item_One","item_Two","item_Three","item_Four",
            "item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到listview 组件
        mListView = (ListView) findViewById(R.id.lv_id);

        List<StudentData> mStudentDataList = new ArrayList<>();  //创建studentData 对象集合
        for( int i = 1; i <= 18 ; i++) {
            StudentData mStudentData = new StudentData();      //循环创建studentData 对象
            mStudentData.setName("lum " + i + " 号");          //为对象设置姓名
            mStudentData.setAge(i);                             //为对象设置 年龄
            mStudentData.setPhoto(R.drawable.lum);              //为对象设置照片
            mStudentDataList.add(mStudentData);                  //将对象添加到列表中
        }

        //创建Adapter 实例化对象, 调用构造函数传参,将数据和adapter  绑定
        MyListAdapter mMyListAdapter = new MyListAdapter(mStudentDataList,this);
        mListView.setAdapter(mMyListAdapter);   //将定义的adapter 和 listView 绑定
    }

}

10)结果显示
这里写图片描述

主要思路:

1)通过想要显示的列表样式,选择合适的 item ,或自定义 item
2)通过合适的adapter 将想要显示的数据 和Item 对应绑定
3)通过setadapter()将 相应的adapter 和 listView 绑定在一起 ,实现显示
demon 参考下载:
listView adapter

Adapter的一种写法 package com.xxkjx.jiusanqi; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class NewsListViewAdapter extends BaseAdapter { List<News> list; LayoutInflater inflater; Context context; public NewsListViewAdapter(List<News> list, Context context) { super(); this.list = list; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.activity_news_list_item, null); viewHolder = new ViewHolder(); viewHolder.title = (TextView) convertView .findViewById(R.id.tv_news_title); viewHolder.publish = (TextView) convertView .findViewById(R.id.tv_news_publish); viewHolder.brief = (TextView) convertView .findViewById(R.id.tv_news_brief); viewHolder.image = (ImageView) convertView .findViewById(R.id.img_news); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.title.setText(list.get(position).getTitle()); viewHolder.publish.setText(list.get(position).getPubblish()); viewHolder.brief.setText(list.get(position).getBrief()); viewHolder.image.setImageResource(list.get(position).getImg()); return convertView; } class ViewHolder { TextView title; TextView publish; TextView brief; ImageView image; } }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值