item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="48dp"android:gravity="center"android:text="万能适配器测试"android:textSize="18sp" />
</LinearLayout>

listview加载数据

private void commonAdapterTest() {ListView listView = (ListView) findViewById(R.id.listview);List<String> datas = new ArrayList<>();for (int i = 0; i < 18; i++) {datas.add("万能适配器测试" + i);}listView.setAdapter(new CommonAdapter<String>(this, datas, R.layout.item) {@Overrideprotected void convertView(View item, String s) {TextView textView = CommonViewHolder.get(item, R.id.textView);textView.setText(s);}});
}

两个工具类优化listview

public abstract class CommonAdapter<T> extends BaseAdapter {private Context context;private List<T> datas;private int layoutId;public CommonAdapter(Context context, List<T> datas, int layoutId) {this.context = context;this.datas = datas;this.layoutId = layoutId;}@Overridepublic int getCount() {return datas == null ? 0 : datas.size();}@Overridepublic T getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {Log.d("listview", "---------LayoutInflater()-----------" + position);convertView = LayoutInflater.from(context).inflate(layoutId, null);}else{}
//        Log.d("listview", "---------getView()-----------" + position);T t = getItem(position);convertView(convertView, t);return convertView;}/*** 局部更新数据,调用一次getView()方法;Google推荐的做法** @param listView 要更新的listview* @param position 要更新的位置*/public void notifyDataSetChanged(ListView listView, int position) {/**第一个可见的位置**/int firstVisiblePosition = listView.getFirstVisiblePosition();/**最后一个可见的位置**/int lastVisiblePosition = listView.getLastVisiblePosition();/**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/if (position >= firstVisiblePosition && position <= lastVisiblePosition) {/**获取指定位置view对象**/View view = listView.getChildAt(position - firstVisiblePosition);getView(position, view, listView);}}/*** 需要去实现的对item中的view的设置操作** @param item* @param t*/protected abstract void convertView(View item, T t);}

2222222222222222222222222222

public class CommonViewHolder {/*** @param view 所有缓存View的根View* @param id   缓存View的唯一标识* @return*/public static <T extends View> T get(View view, int id) {SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();//如果根view没有用来缓存View的集合if (viewHolder == null) {viewHolder = new SparseArray<View>();view.setTag(viewHolder);//创建集合和根View关联}View chidlView = viewHolder.get(id);//获取根View储存在集合中的孩纸if (chidlView == null) {//如果没有改孩纸//找到该孩纸chidlView = view.findViewById(id);viewHolder.put(id, chidlView);//保存到集合}return (T) chidlView;}
}

2、BaseAdapter使用

public class SampleAdapter extends BaseAdapter {private List<AreaEntity> mDataSet;private Context context;public SampleAdapter(Context context, List<AreaEntity> dataSet) {this.mDataSet = dataSet;this.context = context;}@Overridepublic int getCount() {return mDataSet.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}//  删除 打勾 全选public void cleckAll(int is_checked) { //全选 删除多少那里要删除全部for (int a = 0; a < mDataSet.size(); a++) {if (is_checked == a) {mDataSet.get(a).setIfsecect(true);} else {mDataSet.get(a).setIfsecect(false);}}notifyDataSetChanged();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = View.inflate(context, R.layout.item_popup_car, null);TextView textView = (TextView) convertView.findViewById(R.id.text);textView.setText(mDataSet.get(position).getName());if (position == 1) {textView.setTextColor(context.getResources().getColor(R.color.derder));}if (mDataSet.get(position).isIfsecect()) {textView.setBackgroundColor(context.getResources().getColor(R.color.topbgokc));} else {textView.setBackgroundColor(context.getResources().getColor(R.color.xianlanbgc));}return convertView;}}

3、ArrayAdapter使用

item_view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tv_items"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="20dp"android:textSize="25sp"/></LinearLayout>

实现

private String[] mTitle = new String[]{"开启蓝牙", "关闭蓝牙", "设备列表", "接收数据", "已配对设备"};
mList.setAdapter(new ArrayAdapter<>(this, R.layout.item_list, R.id.tv_items, mTitle));

简易listview与adapter实现列表,ArrayAdapter和BaseAdapter相关推荐

  1. Android ListView 和 ***Adapter 从本地/网络获取歌曲列表

    本文内容 环境 项目结构 测试数据 演示 1:SimpleAdapter 演示 2:BaseAdapter 演示 3:CustomLazyList 演示 4:CustomLazyCompleteLis ...

  2. AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表

    代码请见SimpleAdapterDemo.zip. 步骤如下: 1.创建主布局文件 <RelativeLayout xmlns:android="http://schemas.and ...

  3. Android listview与adapter用法

    2019独角兽企业重金招聘Python工程师标准>>> 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListVi ...

  4. 关于ListView 自定义 Adapter的问题

    上周碰到了一个问题,就是我自定义了一个View进行绘图,如果这个图多了以后,一个屏幕显示不下,于是我第一个想到的就是将这个View放在ScrollView中,可是如果放在ScrollView中的话,这 ...

  5. Android控件——ListView之Adapter提供数据(其二)

    2019独角兽企业重金招聘Python工程师标准>>> 上一节中一些列表集合数据到手机屏幕时,通常采用ListView组件+ArrayAdapter. 虽然它能为我们提供展示数据列表 ...

  6. 【发际线大作战】Android Studio使用Intent和ListView开发一个联系人列表的APP

    要求 Intent和ListView的结合使用 目标:1. 掌握不同Activity之间跳转的方法,以及如何利用intent和bundle进行数据的传递:2. 掌握ListView控件使用的基本方法. ...

  7. ListView 和 Adapter 适配器的简单介绍

    文章目录 1.ListView组件 2.Adapter 适配器 3.ArrayAdapter示例 4.SimpleAdapyer 适配器示例 5.BaseAdapter 适配器示例 主要思路: 1.L ...

  8. 带中文索引的ListView 仿微信联系人列表

    因为各种原因,项目经理和产品经理把我做的东西给否定了,所以决定分享出去. 主要功能: 1 .带中文索引的ListView 2.自己定义顶部搜索视图,能够对返回button,搜索button加入事件监听 ...

  9. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4139998.html 举个例子吧,以好友列表为例 ListVi ...

最新文章

  1. python if语句多个条件-python if条件判断语句
  2. Linux入门:部署JavaWeb项目
  3. 零基础Python学习路线图,小白的进阶之路!
  4. python开发专属表情包_Python开发个人专属表情包网站
  5. 学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案
  6. nginx 配置 http/2(h2) 和 http 在同一端口的问题
  7. OpenStack —— DevStack一键自动化安装
  8. 微机个人笔记-存储单元编址
  9. docker学习-docker解决了什么问题
  10. QOS边界信任COS-交换机
  11. loadrunner性能测试——第一步 录制脚本(中文版)
  12. 【现代软件工程】6月中旬团队项目心得
  13. 项目启动报 myql字符集报错的问题
  14. 完美世界hr给大家的简历修改和面试的建议
  15. R中报错ERROR: configuration failed for package ‘magick’
  16. office随笔记录—— 批量删除空白行
  17. GIS地图描边特效的实现
  18. linux编辑搜索命令,Linux 命令大全提供 500 多个 Linux 命令搜索
  19. 在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型
  20. nginx: 405 not allowed问题解决方法

热门文章

  1. [vue] 什么是虚拟DOM?
  2. [vue] 如何解决vue打包vendor过大的问题?
  3. [css] 简述下你理解的优雅降级和渐进增强
  4. [vue-element] ElementUI是怎么做表单验证的?在循环里对每个input验证怎么做呢?
  5. 工作292:修改父子组件传值错误
  6. 前端学习(2475):表单数据绑定处理
  7. 前端学习(1757):前端调试值之网络条件与user-Agent的设置
  8. 前端学习(1394):多人管理项目14多人加密使用
  9. 第七十五期:网络 | 5G那些运营商不愿说的秘密
  10. java面试题3 牛客:下面有关jdbc statement的说法错误的是