ListView案例集锦
ListView案例集锦
1.ArrayAdapter的创建方式
1.构造函数简介
public ArrayAdapter (Context context, int resource, T[] objects)
- 上下文,就是当前的Java文件
- 资源文件,就是每一个子项(每一行)的布局,比如当个的textView,带多选框的,带复选框的等等
- 数据源,数组或者是集合
常见的小布局:
- 前面统一写:android.R.layout.
simplelistitem1:每个列表项都是一个普通的textView
simplelistitem2:每个列表项都是一个普通的textView(字体略大)
simplelistitemchecked:每个列表项都是一个已勾选的列表项
simplelistitemmultiplechoice:每个列表项都是带多选框的文本
simplelistitemsingle_choice:每个列表项都是带单选框的文本
1.1数组当数据源
第一步:编写布局文件
<!-- 数组当数据源--><ListViewandroid:id="@+id/mybooks"android:layout_width="wrap_content"android:layout_height="wrap_content"android:divider="@mipmap/blue"android:dividerHeight="10dp"/>
第二步:创建数组数据,编写Java中的适配器
注意子项的布局文件开始要从android包开始导入。
第三步:绑定适配器
public class Listviewdemoactivity2Activity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_listviewdemoactivity2);
// 第一步:获取布局文件中的ListViewListView listView=findViewById(R.id.mybooks);
// 第二步:创建数据源String[] books={"Java" ,"数据结构","大学计算机","专业英语","Vue速成"};
// 第三步:创建ArrayAdapter,传入数据
// 注意一个小小的问题,从系统中导入子项的布局文件的样式要从安卓的包开始写ArrayAdapter<String> adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1,books);
// 第四步:绑定适配器listView.setAdapter(adapter);}
}
效果图:
1.2集合当数据源
创建方式只需要把1.1的数组变成集合的形式就可以了。
public class Listviewdemoactivity2Activity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_listviewdemoactivity2);
// 第二种:采用集合中的数据
// 第一步:获取布局文件中的ListViewListView listView=findViewById(R.id.mybooks);
// 第二步:创建数据源List<String> colthes=new ArrayList<String>();colthes.add("褂子");colthes.add("裤子");colthes.add("鞋子");colthes.add("袜子");
// 第三步:创建ArrayAdapter,传入数据
// 注意一个小小的问题,从系统中导入子项的布局文件的样式要从安卓的包开始写ArrayAdapter<String> adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1,colthes);
// 第四步:绑定适配器listView.setAdapter(adapter);}
}
效果图:
2.entries引入资源文件的方式
1.这种方式的好处是不用写Java文件。直接写布局文件就可以了。布局文件如下。
第一步:先去values中的string文件中建立一个phone的数组。
- name指定的名字就是要引入的数组。
<resources><string name="app_name">shiyan1</string>
<!--设置一个手机数组--><string-array name="phone"><item>苹果</item><item>华为</item><item>小米</item></string-array></resources>
第二步:mipmap中导入我们需要的分割线的图片。
- 导入了一个blue.png
第三步:编写布局文件。
- 设置分割线
- 设置分割线的高度
- entries引入我们第一步创建的数组
注意:此时数组中@array/数组名称,而不是我们的string。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".Listviewdemoactivity2Activity">
<!--采用布局的方式进行创建--><ListViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:entries="@array/phone"android:divider="@mipmap/blue"android:dividerHeight="10dp"></ListView>
</LinearLayout>
第四步:设置成主启动类。
<activityandroid:name=".Listviewdemoactivity2Activity"android:exported="true" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>
效果图:
3.采用SimpleAdapter的创建方式
为什么需要引入SimpleAdapter,原先的ArrayAdapter一行中只允许创建一个简单的子项,原先的子项的布局方式都是系统指定的。而现在的子项的布局方式并不是引入系统的而是我们自己去指定的,所以可以实现非常强大的布局。
1.构造函数
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
- 上下文
- List代表的是整个ListView要显示的数据,Map代表的是每个子项需要显示的内容
- Map中键的集合
- 子项布局文件中的id,需要和参数进行一一的对应的
2.创建一个如下图所示的案例:
效果图:
第一步:创建一个父布局文件,写入一个Listview
<!--设置父布局--><ListViewandroid:id="@+id/mypeople"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView>
<!-- 设置要显示的内容--><TextViewandroid:id="@+id/result"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="当前选中的是:"android:textSize="30dp"/>
第二步:创建一个子布局文件。命名为mylistpeople
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><ImageViewandroid:maxHeight="20dp"android:maxWidth="20dp"android:adjustViewBounds="true"android:id="@+id/header"android:layout_width="wrap_content"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/username"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/desc"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>
第三步:去第一步创建的布局文件对应的activity进行编写SimpleAdapter的代码
- 先往maimap中导入四张头像的图片im3.png,im4.png,im2.png,im1.png
public class SimpleadapterdemoActivity extends AppCompatActivity {
//创建数据private int header[]={R.mipmap.im1,R.mipmap.im2,R.mipmap.im3,R.mipmap.im4};private String username[]={"张三","李四","王五","赵六"};private String[] desc={"帅气","聪明","灵力","优秀"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simpleadapterdemo);
// 第一步:获取ListView对象ListView listView=findViewById(R.id.mypeople);
// 第二步:创建数据List<Map<String,Object>> mapList=new ArrayList<Map<String,Object>>();
// 第三步:初始化List集合for (int i = 0; i < 4; i++) {Map<String,Object> map=new HashMap<String,Object>();map.put("header",header[i]);map.put("username",username[i]);map.put("desc",desc[i]);mapList.add(map);}
// 第四步:创建一个SimpleAdapterSimpleAdapter simpleAdapter=new SimpleAdapter(this,mapList,R.layout.mylistpeople,new String[]{"header","username","desc"},new int[]{R.id.header,R.id.username,R.id.desc});
// 第五步:绑定适配器listView.setAdapter(simpleAdapter);}
}
此时创建的是没有设置监听器的,但是效果是有的:
第四步:设置监听器,将选中的信息动态的显示在下面
public class SimpleadapterdemoActivity extends AppCompatActivity {
//创建数据private int header[]={R.mipmap.im1,R.mipmap.im2,R.mipmap.im3,R.mipmap.im4};private String username[]={"张三","李四","王五","赵六"};private String[] desc={"帅气","聪明","灵力","优秀"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simpleadapterdemo);
// 第一步:获取ListView对象ListView listView=findViewById(R.id.mypeople);
// 第二步:创建数据List<Map<String,Object>> mapList=new ArrayList<Map<String,Object>>();
// 第三步:初始化List集合for (int i = 0; i < 4; i++) {Map<String,Object> map=new HashMap<String,Object>();map.put("header",header[i]);map.put("username",username[i]);map.put("desc",desc[i]);mapList.add(map);}
// 第四步:创建一个SimpleAdapterSimpleAdapter simpleAdapter=new SimpleAdapter(this,mapList,R.layout.mylistpeople,new String[]{"header","username","desc"},new int[]{R.id.header,R.id.username,R.id.desc});
// 补充:设置监听器
// ListView中要显示的结果:TextView textView=this.findViewById(R.id.result);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {TextView name=(TextView) view.findViewById(R.id.username);TextView desc=(TextView) view.findViewById(R.id.desc);
// 设置textView区域显示的内容
// 一定要getText才能获取当前的文本,需要toString才能转换成文本String result="当前选中的是:"+name.getText().toString()+"个人简介是:"+desc.getText().toString();textView.setText(result);
// 弹出提示的内容Toast toast=Toast.makeText(SimpleadapterdemoActivity.this, result, Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER,0,0);toast.show();}});// 第五步:绑定适配器listView.setAdapter(simpleAdapter);}
}
完整的效果图:
3.1监听器
1.监听的方法。OnItemClickListener。
设置监听器的方法目的是为了做SimpleAdapter的案例的。
该监听器只有在点击子项目的时候才会进行触发的。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {}
- parent获取的是整个ListView要显示的东西。parent就是一个ListView对象(强制转换)。
- view,可以通过getText获取当前控件中的文字
- position,当前的子项目所在的位置
- id,和position相同
可以通过parent进行数据的获取的。先强制转换成我们的ListView对象,再去获取adapter对象。获取ListAdapter对象后再去获取Model对象。
ListView listView = (ListView) parent;ListAdapter listAdapter = listView.getAdapter();SelfModel selfModel = (SelfModel) listAdapter.getItem(position);
ListView案例集锦相关推荐
- python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...
- python开发项目案例集锦 pdf_Python项目开发案例集锦 实战项目代码+配套文件
Python项目开发案例集锦涵盖8个开发方向.23个项目,循序渐进地让读者在实践中学习,在实践中提升实际开发能力. 全书共8篇:控制台程序.小游戏.实用小工具.网络爬虫.数据分析.人工智能.Web开发 ...
- 于.net开发平台项目案例集锦
订阅 | 上一篇 | 下一篇 五味笔记 于.net开发平台项目案例集锦 作者:henq 日期:2007-09-14 字体大小: 小 中 大 基于.net开发平台项目案例集锦 经过微软.net Fra ...
- 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 京东图书地址:https://item.jd.com/12571990.html 当当图书地址:h ...
- 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(3)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-10 把十进制数转换为其他进制形式. 例4-11 验证6174猜想. 例4-12.例4- ...
- 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(2)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-4 例4-5 例4-6 微课|中学生可以这样学Python(例4.3):百钱买百鸡 例4-7 ...
- 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(1)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-1 例4-2 例4-3 京东图书地址:https://item.jd.com/1257199 ...
- 微课|《Python编程基础与案例集锦(中学版)》第3章例题讲解(2)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例3-6 微课|中学生可以这样学Python(例3.2):今天是今年的第几天 例3-7 例3-8 ...
- 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例3-1 例3-2 例3-3:微课|中学生可以这样学Python(3.3节):多分支选择结构 例3 ...
最新文章
- Python 21 Flask(二)上下文管理详解
- 清除距今天7天的日志
- ST17H26调试板操作注意事项
- 如何替公司省下数千万勒索费用
- java 服务降级_微服务的降级学习
- Spring Cloud 学习笔记(2 / 3)
- (转) Twisted :第十九部分 改变之前的想法
- python设计模式5-原型模式
- 如何解决PS软件工作区不能吸附到工具栏?
- SSH框架 openSessionInView的配置
- 基于 RT-Thread Studio的CPK-RA6M4 开发环境搭建指南
- 无线路由器dhcp服务器连接失败,TP-Link路由器桥接提示“获取IP地址失败,请检查DHCP是否开启”怎么办...
- APP首次启动提示开启定位服务
- 智能汽车操作系统行业研究及十四五规划分析报告
- Java:使用Java编写一个随机点名器
- 超简单制作多系统启动U盘教程
- 前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP
- 慧差\畸变 zemax示例
- 建立互信及追求卓越的环境
- 大连马拉松比赛期间多条公交临时改线移站
热门文章
- 爬虫-requests库(二)get请求参数的使用 —搜狗搜索后爬取搜索结果
- Matlab实现孤勇者
- 【文献翻译】Prediction of Seizure Recurrence. A Note of Caution
- 用HTML和CSS3制作3D动画
- 程序员锁死服务器致游戏公司倒闭 当事人反驳:这锅我不背
- 计算机语言学 pdf,语言学必读书目PDF版.doc
- CSDN、Jupyter notebook、有道云笔记和Typora四者通用的Markdown语法
- 那些年啊,那些事——一个程序员的奋斗史 ——125
- 关爱码农成长:关于写代码二三事
- oracle整理笔记