最近维护项目,项目里面使用的都是ListView 这里也对ListView 回顾一下

以下 demo 地址

ListView 在Android 里面用来实现列表的,

在xml 中创建ListView 代码如下

<?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"><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

实现list 换需要适配器(Adapter) ,ListView常用的适配器(Adapter)有以下几种。

1  ArrayAdapter 绑定数组

2  SimpleAdapter 绑定xml 中对应的数据

3  SimpleCursorAdapter 绑定游标

4  BaseAdapter 通用的是适配器,(一般都是自定义)

1  ArrayAdapter 绑定数组

下面写一个demo

xml 使用上面的

java 代码如下

public class ArrayAdapterActivity extends AppCompatActivity {private String[] data = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.array_adapter_activity_layout);final ListView listView = findViewById(R.id.listView);final ArrayAdapter<String>adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,data);listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(ArrayAdapterActivity.this, adapter.getItem(position),Toast.LENGTH_SHORT).show();}});}
}

实现效果

没有分割线,设置一下

        // 设置分割线listView.setDivider(new ColorDrawable(Color.RED));// 设置分割线的宽度listView.setDividerHeight(5);

设置之后的效果'

'

2 SimpleAdapter

java 代码如下

public class SimpleAdapterActivity extends AppCompatActivity {private String[] project = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};private String[] dev = {"张三", "李四", "王二", "小赵", "小钱", "小孙", "小李", "小明"};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);ArrayList<Map<String, Object>> mData = new ArrayList<>();int lengh = project.length;for (int i = 0; i < lengh; i++) {Map<String, Object> item = new HashMap<>();item.put("project", project[i]);item.put("dev", dev[i]);mData.add(item);}ListView listView = findViewById(R.id.list);SimpleAdapter adapter = new SimpleAdapter(this, mData, android.R.layout.simple_list_item_2,new String[] {"project", "dev"},new int[] {android.R.id.text1, android.R.id.text2});// 设置分割线listView.setDivider(new ColorDrawable(Color.RED));// 设置分割线的宽度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}

实现的效果如下

从上面的代码可以看到adapter 加载item layout 使用的是同,其实我们可以自己写layout ,下面写一个横线的layout

layout 代码如下

<?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="80dp"android:orientation="horizontal"><TextViewandroid:id="@+id/simple_id"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textColor="@android:color/holo_blue_light"android:gravity="center" /><TextViewandroid:id="@+id/simple_name"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:layout_marginLeft="50dp"android:textColor="@android:color/holo_blue_light"android:gravity="center" /><TextViewandroid:id="@+id/simple_sex"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textSize="20sp"android:textColor="@android:color/holo_red_dark"android:layout_marginLeft="100dp"android:gravity="center" /><TextViewandroid:id="@+id/simple_class"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textSize="28sp"android:textColor="@android:color/holo_purple"android:layout_marginLeft="100dp"android:gravity="center" /></LinearLayout>

java 代码如下

public class SingleSimpleAdapterActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);List<Map<String, Object>> mData = new ArrayList<>();Map<String, Object> map1 = new HashMap<>();map1.put("name", "张三");map1.put("sex", "男");map1.put("class", "一年级");Map<String, Object> map2 = new HashMap<>();map2.put("name", "李四");map2.put("sex", "男");map2.put("class", "二年级");Map<String, Object> map3 = new HashMap<>();map3.put("name", "王二");map3.put("sex", "男");map3.put("class", "三年级");Map<String, Object> map4 = new HashMap<>();map4.put("name", "春花");map4.put("sex", "女");map4.put("class", "一年级");Map<String, Object> map5 = new HashMap<>();map5.put("name", "夏草");map5.put("sex", "女");map5.put("class", "二年级");Map<String, Object> map6 = new HashMap<>();map6.put("name", "秋香");map6.put("sex", "女");map6.put("class", "三年级");mData.add(map1);mData.add(map2);mData.add(map3);mData.add(map4);mData.add(map5);mData.add(map6);ListView listView = findViewById(R.id.list);SimpleAdapter adapter = new SimpleAdapter(this, mData, R.layout.single_simple_adapter_item, new String[] {"name", "sex", "class"},new int[] {R.id.simple_name, R.id.simple_sex, R.id.simple_class});// 设置分割线listView.setDivider(new ColorDrawable(Color.RED));// 设置分割线的宽度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}

实现的效果图

3  SimpleCursorAdapter 的主要代码如下

public class SimpleCursorActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);String[] simpleCursor = new String[] {"_id", "name", "sex", "class"};MatrixCursor cursor = new MatrixCursor(simpleCursor);cursor.addRow(new Object[] {null,"张三", "男", "一年级"});cursor.addRow(new Object[] {null,"李四", "男", "二年级"});cursor.addRow(new Object[] {null,"王二", "男", "三年级"});cursor.addRow(new Object[] {null,"春花", "女", "一年级"});cursor.addRow(new Object[] {null,"夏草", "女", "二年级"});cursor.addRow(new Object[] {null,"秋香", "女", "三年级"});ListView listView = findViewById(R.id.list);SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.single_simple_adapter_item, cursor, simpleCursor,new int[] {R.id.simple_id,R.id.simple_name, R.id.simple_sex, R.id.simple_class});// 设置分割线listView.setDivider(new ColorDrawable(Color.RED));// 设置分割线的宽度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}

实现的效果图

4  BaseAdapter 通用的是适配器,(一般都是自定义)

定义一个myAdapter

public class MyAdapter extends BaseAdapter {private List<ListBean> mDatas = null;private Context mContext = null;public MyAdapter(Context context, List<ListBean> datas) {mDatas = datas;mContext = context;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int position) {return mDatas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.list_base_item, null);holder.image = convertView.findViewById(R.id.image);holder.title = convertView.findViewById(R.id.title);holder.content = convertView.findViewById(R.id.content);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.image.setImageResource(mDatas.get(position).getImgId());holder.title.setText(mDatas.get(position).getTitle());holder.content.setText(mDatas.get(position).getContent());return convertView;}public final class ViewHolder {public ImageView image;public TextView title;public TextView content;}}

布局 list_base_item

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="120dp"xmlns:app="http://schemas.android.com/apk/res-auto"><ImageViewandroid:id="@+id/image"android:layout_width="120dp"android:layout_height="match_parent"android:src="@color/colorAccent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent" /><TextViewandroid:id="@+id/title"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="标题头"app:layout_constraintLeft_toRightOf="@+id/image"app:layout_constraintTop_toTopOf="parent"android:layout_marginLeft="50dp" /><TextViewandroid:id="@+id/content"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="标题头"app:layout_constraintLeft_toRightOf="@+id/image"app:layout_constraintTop_toBottomOf="@+id/title"android:layout_marginTop="50dp"android:layout_marginLeft="50dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

activity 代码如下

public class ListBaseAdapterActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);List<ListBean> list = new ArrayList<>();for (int i = 0; i < 20; i++) {ListBean listBean = new ListBean(R.mipmap.one, "标题头", "内容内容");list.add(listBean);}ListView listView = findViewById(R.id.list);MyAdapter adapter = new MyAdapter(ListBaseAdapterActivity.this, list);// 设置分割线listView.setDivider(new ColorDrawable(Color.RED));// 设置分割线的宽度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}

实现的效果图

代码都狠简单就不多啰嗦了,

Android ListView (多个adapter 说明)相关推荐

  1. Android listview viewholder

    2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...

  2. Android ListView重写Adapter

    在很多项目中都会用到ListView,但基本都需要进行重写Adapter,但每次都是会找好半天,写在这儿方便以后copy~~ xml定义一个ListView: <LinearLayout xml ...

  3. [Android]ListView性能优化之视图缓存

    前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题.本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流 ...

  4. android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  5. Android中的各种Adapter

    1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(ListView,GridView)等地方都需要用到Adapter.如下图直 ...

  6. android listview 不显示_ListView详细介绍与使用

    image 前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日 ...

  7. Android ListView异步加载图片乱序问题,原因分析及解决方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...

  8. android ListView布局之二(是用simpleAdapter绑定数据)

    main.xml主布局文件,代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  9. android listview 列加id,Android实战开发之ListView同一个item显示2列的实现方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用List ...

最新文章

  1. 4K60帧视频实时抠图,连头发丝都根根分明
  2. E - 数据结构实验之排序五:归并求逆序数
  3. Linux下构建FTP服务器
  4. [react] 描述下在react中无状态组件和有状态组件的区别是什么?
  5. 2021-03-10 模板扩展类调用模板基类成员函数
  6. VC 2010 Express下安装OpenCV2.4.4 遇到的问题
  7. linux mysql 配置root_Linux配置(mysql安装篇)
  8. Java项目部署目录结构与部署方法 打包方法attilax总结 目录 1.1. Java web项目部署目录结构 1 2. Springboot项目的部署结构 2 3. Java项目的开发模式下目录
  9. vue 文字无缝滚动_vue文字横向滚动公告
  10. Android开发指南-二维图形
  11. 视频会议室预定小程序_6个最佳免费视频会议应用程序
  12. 澳洲留学:说说在澳洲打工的那些苦与痛
  13. chrome浏览器 各个版本下载地址
  14. Kvm与webvirtmgr虚拟化安装
  15. 梅赛德斯-奔驰获得世界上第一个有条件自动驾驶的国际有效系统批准
  16. 英语学习经验分享(四六级、竞赛、口语)
  17. 数据结构 散列表 除留余数法 线性探测法解决冲突
  18. 【设计模式7】代理模式
  19. Windows 8寄托着微软对移动计算、客厅控制和超级操作系统的全新理解与尝试
  20. shell 脚本-01 变量、字符串、数组

热门文章

  1. 2022-2028年中国酱腌菜行业市场研究及前瞻分析报告
  2. Python 笔试面试及常用技巧 (1)
  3. 阿里云Centos 解决挖矿程序:kdevtmpfsi--服务器CPU占用高、内存占用高
  4. Mybatis传递多个参数的4种方式
  5. 揭富人与穷人21个不同思维 看富豪如何脱颖而出
  6. SSM框架整合(Spring+SpringMVC+MyBatis)
  7. GPU编程和流式多处理器
  8. CodeGen用户定义的扩展令牌
  9. 不是都需要ARM吗?
  10. (八)pdf的构成之文件体(page属性)