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

文章目录

    • Adapter适配器
      • 概述
      • 关于视图重用
      • 关于ViewHolder
      • 使用步骤
    • base-adapter-helper库的使用
      • 1.导入库
      • 2.将库中的java文件复制到项目中
      • 3.编译并解决问题
      • 4.使用

Adapter适配器

概述

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

Adapter适配器和base-adapter-helper库的使用_第1张图片

关于视图重用

如果正常用listview的话一个数据对应一个控件,那么占用的内存就很大了,这时候就需要视图重用,不用的视图放入视图回收站convertView,如果视图回收站没有视图则创建视图,再更新数据时就不用创建新的视图了,直接用在视图回收站中创建好的视图就可以了。
Adapter适配器和base-adapter-helper库的使用_第2张图片
Adapter适配器和base-adapter-helper库的使用_第3张图片

关于ViewHolder

由于将数据赋值给视图时每次都要执行findViewById,这样也会浪费内存,所以创建一个ViewHolder类来保存你需要保存的控件,这样就不用执行多次find了。
Adapter适配器和base-adapter-helper库的使用_第4张图片

使用步骤

创建主界面ListView和列表item视图
Adapter适配器和base-adapter-helper库的使用_第5张图片
Adapter适配器和base-adapter-helper库的使用_第6张图片

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);

    }
}

结果
Adapter适配器和base-adapter-helper库的使用_第7张图片

base-adapter-helper库的使用

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

1.导入库

Adapter适配器和base-adapter-helper库的使用_第8张图片

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

Adapter适配器和base-adapter-helper库的使用_第9张图片

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);
    }
}

结果

Adapter适配器和base-adapter-helper库的使用_第10张图片

你可能感兴趣的:(Adapter适配器和base-adapter-helper库的使用)