Android自定义适配器

一、案例演示

为了实现面向对象,便于后期数据的添加和修改,我们使用自定义适配器来完成功能,简单适配器和自定义适配器完成项目结果相同,但是过程并不相同。
在这里插入图片描述

1、activity.xml 整体布局页面

整体布局线形布局,有一个listview控件用于存放数据

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/support_simple_spinner_dropdown_item"/>

</LinearLayout>

2、item_list.xml 列表项布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:gravity="center" />
    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:gravity="center"
        android:textSize="17sp"
        android:textColor="#ff0000" />
</LinearLayout>

二、普通适配器(SimpleAdapater)

1、MainActivity.java

        listView=findViewById(R.id.listview);
        //准备数据
        String names[]=new String[]{"路飞","娜美","山治","索隆"};
        int images[]=new int[]{R.drawable.lufei,R.drawable.namei,R.drawable.shanzhi,R.drawable.suolong};

        ArrayList list=new ArrayList();
        //循环来赋值数据
        for(int i=0;i<names.length;i++){
            //一个列表项组织成一个map对象
            HashMap map=new HashMap();
            map.put("images",images[i]);
            map.put("names",names[i]);
            //创建一个list
            list.add(map);
        }

        //准备适配器,第二个参数list集合,其中元素map对象,第三个参数列表项布局
        //第四个参数map中的数组,第五个参数控件的id,键和id一一对应
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,list,R.layout.item_list,
                new String[]{"images","names"},new int[]{R.id.iv_icon,R.id.tv_name});
        //给listview加适配器
        listView.setAdapter(simpleAdapter);

三、自定义适配器(BaseAdapter)

1、Lufei.java

实体类

public class Lufei {
    //成员变量
    private String name;
    private int image;

    //getset方法

    public String getName() {
        return name;
    }

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

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    //构造方法

    public Lufei(String name, int image) {
        this.name = name;
        this.image = image;
    }
}

2、MyAdapter

自定义适配器用来存储数据

//将数据放到列表项布局中
public class MyAdapter extends BaseAdapter {

    //数据集合
    private List<Lufei> data;
    //列表项id
    private int layout_id;
    //上下文
    private Context context;
    //构造方法
    public MyAdapter(Context context,List<Lufei> data, int layout_id) {
        this.context=context;
        this.data = data;
        this.layout_id = layout_id;
    }
    //获得列表项的数量data.size()
    @Override
    public int getCount() {
        return data.size();
    }
    //返回列表项对应的数据对象,获取position位置数据对象,集合中position位置元素
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }
    //当前元素的位置
    @Override
    public long getItemId(int position) {
        return position;
    }
    //将一条数据放到列表项中,position位置数据
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //1.数据在哪里,list集合中data中拿,拿position位置数据
        Lufei lufei=data.get(position);
        int image=lufei.getImage();
        String name=lufei.getName();

        //2.将这两个数据放到控件上
        //通过inflater对象将布局装为view对象,在通过view对象findViewById找到对象
        LayoutInflater inflater=LayoutInflater.from(context);
        View view=inflater.inflate(layout_id,null);
        ImageView imageView=view.findViewById(R.id.iv_icon);
        TextView textView=view.findViewById(R.id.tv_name);

        //3.数据放到控件上
        imageView.setImageResource(image);
        textView.setText(name);
        return view;
    }
}

3、MainActivity.java

调用适配器完成存储

        listView=findViewById(R.id.listview);
        
        ArrayList list=new ArrayList();
        list.add(new Lufei("路飞",R.drawable.lufei));
        list.add(new Lufei("娜美",R.drawable.namei));
        list.add(new Lufei("山治",R.drawable.shanzhi));
        list.add(new Lufei("索隆",R.drawable.suolong));

        MyAdapter myAdapter=new MyAdapter(this,list,R.layout.item_list);
        listView.setAdapter(myAdapter);
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑伴你而行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值