Adapter适配器和base-adapter-helper库的使用

Adapter适配器

概述

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:

在这里插入图片描述

关于视图重用

如果正常用listview的话一个数据对应一个控件,那么占用的内存就很大了,这时候就需要视图重用,不用的视图放入视图回收站convertView,如果视图回收站没有视图则创建视图,再更新数据时就不用创建新的视图了,直接用在视图回收站中创建好的视图就可以了。
在这里插入图片描述
在这里插入图片描述

关于ViewHolder

由于将数据赋值给视图时每次都要执行findViewById,这样也会浪费内存,所以创建一个ViewHolder类来保存你需要保存的控件,这样就不用执行多次find了。
在这里插入图片描述

使用步骤

创建主界面ListView和列表item视图
在这里插入图片描述
在这里插入图片描述

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

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

public class MainActivity1 extends AppCompatActivity {
    //定义一个类来存放你需要保存的控件
    class ViewHoider{
        TextView textView;
    }
    class Myadapter extends BaseAdapter{

        @Override
        public int getCount() {
            //返回list的大小
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //取数据
            String data = list.get(position);
            //创建ViewHolder对象
            ViewHoider hoider = null;
            //当视图回收站中没有视图时
            if (convertView == null){
                //创建视图
                convertView=View.inflate(MainActivity1.this,R.layout.item,null);

                TextView textView = convertView.findViewById(R.id.tv_list);
                hoider = new ViewHoider();
                hoider.textView = textView;
                //将viewHolder与视图绑定
                convertView.setTag(hoider);

            }else {
                    hoider= (ViewHoider) convertView.getTag();
            }
            //将数据赋值给视图对象
           hoider.textView.setText(data);
            return convertView;
        }
    }
    ListView listView;
    List<String> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.创建视图,创建并初始化ListView对象
         listView = findViewById(R.id.lv_show);
        //2.创建数据集合
         list = new ArrayList<>();
        //向集合中添加数据
        for (int i = 0; i <1000 ; i++) {
            list.add("数据"+i);
        }
        //3.创建并设置适配器
        Myadapter myadapter = new Myadapter();
        listView.setAdapter(myadapter);

    }
}

结果
在这里插入图片描述

base-adapter-helper库的使用

  • 使用原始的adapter适配器,要解决视图重用,还有ViewHolder等问题,引用第三方库base-adapter-helper可以让库自己处理这些问题,可以很大程度上使代码更加简单,便捷。
  • base-adapter-helper库的地址https://github.com/JoanZapata/base-adapter-helper.git

1.导入库

在这里插入图片描述

2.将库中的java文件复制到项目中

在这里插入图片描述

3.编译并解决问题

由于base-adapter-helper库还引用了其他的库,所以会报错,将报错的代码注释即可。

4.使用

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.VideoView;

import com.joanzapata.android.BaseAdapterHelper;
import com.joanzapata.android.QuickAdapter;

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

public class MainActivity extends AppCompatActivity {

    ListView listView;
    List<String> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.创建并初始化ListView对象
         listView = findViewById(R.id.lv_show);
        //2.创建数据集合
         list = new ArrayList<>();
        //向集合中添加数据
        for (int i = 0; i <1000 ; i++) {
            list.add("数据"+i);
        }
        //3.创建并设置适配器
        QuickAdapter adapter = new QuickAdapter<String>(this, R.layout.item, list) {
            @Override
            protected void convert(BaseAdapterHelper helper, String item) {					//取数据并将数据赋值给视图
                helper.setText(R.id.tv_list, item);
            }
        };
        listView.setAdapter(adapter);
    }
}

结果

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值