Android ListView (多个adapter 说明)
最近维护项目,项目里面使用的都是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 说明)相关推荐
- Android listview viewholder
2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...
- Android ListView重写Adapter
在很多项目中都会用到ListView,但基本都需要进行重写Adapter,但每次都是会找好半天,写在这儿方便以后copy~~ xml定义一个ListView: <LinearLayout xml ...
- [Android]ListView性能优化之视图缓存
前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题.本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流 ...
- android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- Android中的各种Adapter
1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(ListView,GridView)等地方都需要用到Adapter.如下图直 ...
- android listview 不显示_ListView详细介绍与使用
image 前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日 ...
- Android ListView异步加载图片乱序问题,原因分析及解决方案
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...
- android ListView布局之二(是用simpleAdapter绑定数据)
main.xml主布局文件,代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- android listview 列加id,Android实战开发之ListView同一个item显示2列的实现方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用List ...
最新文章
- 4K60帧视频实时抠图,连头发丝都根根分明
- E - 数据结构实验之排序五:归并求逆序数
- Linux下构建FTP服务器
- [react] 描述下在react中无状态组件和有状态组件的区别是什么?
- 2021-03-10 模板扩展类调用模板基类成员函数
- VC 2010 Express下安装OpenCV2.4.4 遇到的问题
- linux mysql 配置root_Linux配置(mysql安装篇)
- Java项目部署目录结构与部署方法 打包方法attilax总结 目录 1.1. Java web项目部署目录结构	1 2. Springboot项目的部署结构	2 3. Java项目的开发模式下目录
- vue 文字无缝滚动_vue文字横向滚动公告
- Android开发指南-二维图形
- 视频会议室预定小程序_6个最佳免费视频会议应用程序
- 澳洲留学:说说在澳洲打工的那些苦与痛
- chrome浏览器 各个版本下载地址
- Kvm与webvirtmgr虚拟化安装
- 梅赛德斯-奔驰获得世界上第一个有条件自动驾驶的国际有效系统批准
- 英语学习经验分享(四六级、竞赛、口语)
- 数据结构 散列表 除留余数法 线性探测法解决冲突
- 【设计模式7】代理模式
- Windows 8寄托着微软对移动计算、客厅控制和超级操作系统的全新理解与尝试
- shell 脚本-01 变量、字符串、数组