【Android 常见控件使用】ListView_BaseAdapter 自定义Adapter简单使用
文章目录
- ListView_BaseAdapter简单实用
- 本节引言
- 1.自定义BaseAdapter,然后绑定ListView的最简单例子
- 2.表头表尾分割线的设置
- 3.列表从底部开始显示:stackFromBottom
- 4.设置点击颜色cacheColorHint
- 5.隐藏滑动条
ListView_BaseAdapter简单实用
本节引言
本节我们来继续学习没有讲完的UI控件部分, 回顾上一节,我们介绍了Adapter适配器的概念,然后学习了三个最简单的适配器的使用:
ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而本节给大家讲解的是第一个 需搭配Adapter使用的UI控件:ListView,不过在版本中被RecyclerView这个新控件替换掉了!
列表作为最常用的控件之一,还是有必要好好学习的,本节以一个初学者的角度来学习 ListView,ListView的属性,以及BaseAdapter简单定义,至于ListView优化这些, 我们一步步来~莫急!
1.自定义BaseAdapter,然后绑定ListView的最简单例子
先看看我们要实现的效果图:
一个很简单的ListView,自己写下Item,然后加载点数据这样~ 下面贴下关键代码:
Animal.java:
/*** Created by Jay on 2015/9/18 0018.*/
public class Animal {private String aName;private String aSpeak;private int aIcon;public Animal() {}public Animal(String aName, String aSpeak, int aIcon) {this.aName = aName;this.aSpeak = aSpeak;this.aIcon = aIcon;}public String getaName() {return aName;}public String getaSpeak() {return aSpeak;}public int getaIcon() {return aIcon;}public void setaName(String aName) {this.aName = aName;}public void setaSpeak(String aSpeak) {this.aSpeak = aSpeak;}public void setaIcon(int aIcon) {this.aIcon = aIcon;}
}
AnimalAdapter.java:自定义的BaseAdapter:
/*** Created by Jay on 2015/9/18 0018.*/
public class AnimalAdapter extends BaseAdapter {private LinkedList<Animal> mData;private Context mContext;public AnimalAdapter(LinkedList<Animal> mData, Context mContext) {this.mData = mData;this.mContext = mContext;}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);img_icon.setBackgroundResource(mData.get(position).getaIcon());txt_aName.setText(mData.get(position).getaName());txt_aSpeak.setText(mData.get(position).getaSpeak());return convertView;}
}
最后是MainActivity.java:
public class MainActivity extends AppCompatActivity {private List<Animal> mData = null;private Context mContext;private AnimalAdapter mAdapter = null;private ListView list_animal;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = MainActivity.this;list_animal = (ListView) findViewById(R.id.list_animal);mData = new LinkedList<Animal>();mData.add(new Animal("狗说", "你是狗么?", R.mipmap.ic_icon_dog));mData.add(new Animal("牛说", "你是牛么?", R.mipmap.ic_icon_cow));mData.add(new Animal("鸭说", "你是鸭么?", R.mipmap.ic_icon_duck));mData.add(new Animal("鱼说", "你是鱼么?", R.mipmap.ic_icon_fish));mData.add(new Animal("马说", "你是马么?", R.mipmap.ic_icon_horse));mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);list_animal.setAdapter(mAdapter);}}
好的,自定义BaseAdapter以及完成数据绑定就是这么简单~别问我拿示例的代码,刚开始学就会写出这些代码,我只是演示下流程,让大家熟悉 熟悉而已~
另外,也是为下面的属性验证做准备~
返回顶部
2.表头表尾分割线的设置
listview作为一个列表控件,他和普通的列表一样,可以自己设置表头与表尾: 以及分割线,可供我们设置的属性如下:
- footerDividersEnabled:是否在footerView(表尾)前绘制一个分隔条,默认为true
- headerDividersEnabled:是否在headerView(表头)前绘制一个分隔条,默认为true
- divider:设置分隔条,可以用颜色分割,也可以用drawable资源分割
- dividerHeight:设置分隔条的高度
翻遍了了API发现并没有可以直接设置ListView表头或者表尾的属性,只能在Java中写代码 进行设置了,可供我们调用的方法如下:
- addHeaderView(View v):添加headView(表头),括号中的参数是一个View对象
- addFooterView(View v):添加footerView(表尾),括号中的参数是一个View对象
- addHeaderView(headView, null, false):和前面的区别:设置Header是否可以被选中
- addFooterView(View,view,false):同上
对了,使用这个addHeaderView方法必须放在listview.setAdapter前面,否则会报错。
使用示例:
运行效果图:
代码实现:
先编写下表头与表尾的布局:
view_header.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"android:gravity="center"><TextViewandroid:layout_width="match_parent"android:layout_height="48dp"android:textSize="18sp"android:text="表头"android:gravity="center"android:background="#43BBEB"android:textColor="#FFFFFF"/>
</LinearLayout>
MainActivty.java:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{private List<Animal> mData = null;private Context mContext;private AnimalAdapter mAdapter = null;private ListView list_animal;private LinearLayout ly_content;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = MainActivity.this;list_animal = (ListView) findViewById(R.id.list_animal);//动态加载顶部View和底部Viewfinal LayoutInflater inflater = LayoutInflater.from(this);View headView = inflater.inflate(R.layout.view_header, null, false);View footView = inflater.inflate(R.layout.view_footer, null, false);mData = new LinkedList<Animal>();mData.add(new Animal("狗说", "你是狗么?", R.mipmap.ic_icon_dog));mData.add(new Animal("牛说", "你是牛么?", R.mipmap.ic_icon_cow));mData.add(new Animal("鸭说", "你是鸭么?", R.mipmap.ic_icon_duck));mData.add(new Animal("鱼说", "你是鱼么?", R.mipmap.ic_icon_fish));mData.add(new Animal("马说", "你是马么?", R.mipmap.ic_icon_horse));mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);//添加表头和表尾需要写在setAdapter方法调用之前!!!list_animal.addHeaderView(headView);list_animal.addFooterView(footView);list_animal.setAdapter(mAdapter);list_animal.setOnItemClickListener(this);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(mContext,"你点击了第" + position + "项",Toast.LENGTH_SHORT).show();}
}
好的,代码还是比较简单的,从上面我们看出来一个要注意的问题,就是:
添加表头表尾后,我们发现positon是从表头开始算的,就是你添加的第一个数据本来的 postion 是 0,但是此时却变成了 1,因为表头也算!!
返回顶部
3.列表从底部开始显示:stackFromBottom
如果你想让列表显示你列表的最下面的话,那么你可以使用这个属性,将stackFromBottom 属性设置为true即可,设置后的效果图如下:
返回顶部
4.设置点击颜色cacheColorHint
如果你为ListView设置了一个图片作为Background的话,当你拖动或者点击listView空白位置会发现 item都变成黑色了,这是时候我们可以通过这个cacheColorHint将颜色设置为透明:#00000000
返回顶部
5.隐藏滑动条
我们可以通过设置:android:scrollbars=“none” 或者 setVerticalScrollBarEnabled(true); 解决这个问题!
返回顶部
【Android 常见控件使用】ListView_BaseAdapter 自定义Adapter简单使用相关推荐
- android控件使用大全,Android常见控件使用详解
本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...
- 【Android 常见控件使用】ImageView(图像视图)
文章目录 ImageView(图像视图) 本节引言 1.src属性和background属性的区别 1)写代码验证区别 2)解决blackground拉伸导致图片变形的方法 3)设置透明度的问题 4) ...
- 【Android 常见控件使用】AlertDialog(对话框)详解
文章目录 AlertDialog(对话框)详解 本节引言 1.基本使用流程 2.几种常用的对话框使用示例 3.通过Builder的setView()定制显示的AlertDialog AlertDial ...
- 【Android 常见控件使用】EditText(输入框)
文章目录 EditText(输入框) 本节引言 1.设置默认提示文本 2.获得焦点后全选组件内所有文本内容 3.限制EditText输入类型 4.设置最小行,最多行,单行,多行,自动换行 5.设置文字 ...
- android组合控件的焦点,撸一个简单的TV版焦点控制的日历控件
1.效果 最近需求要一个遥控控制的日历控件,找了半天没找到轮子,就自己撸一个,先看效果图: 效果图.gif 2.XML属性,所有属性默认为效果图 calender_textSize:星期和日期的字体大 ...
- Android基础控件——ImageView的自定义,巧用Matrix实现图片不变形的炫酷PK条
前言 在开发中常常会遇到PK条制作,如果在PK条中是纯色的情况下,比较好办,如下: 我们通常会设置其权重进行更新两个PK条的进度,实现起来也简单 //更新PkBar宽度比例 private void ...
- Android基础控件——SeekBar的自定义,超短代码模仿抖音带有数字拖拽进度条
前言 在开发中,经常会遇到SeekBar组件的开发,一个高效的自定义SeekBar显得尤为重要,笔者刚好也在项目中大量使用带有数字的拖拽进度条,在深思熟虑后,打算从继承源码形式上,把数字绘制在拖拽进度 ...
- Android常见控件— — —EditText
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- 一步一步学android之控件篇——ListView自定义显示数据格式
上一篇博客说了ListView的基本使用,这篇将是对ListView的使用进行一个提高,在日常生活中,如果单单给你看一些图片,你可能都不知道这个图片表达的什么意思,但是要是在图片旁边写的备注或者加个名 ...
- [Android Studio]掌握Android Studio的五种常见控件和五种常见布局
目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...
最新文章
- iphonex如何关机_iPhone X手机屏幕出现绿线怎么回事_屏幕绿线该如何处理?
- 制作网站设计项目进度表让用户充分了解网站制作进程
- Linux基础命令-mkdir
- mysql插入大量数据总结
- 【转】centos安装vim7.4
- django restful 请求_利用 Django REST framework 构建 RESTful Web API
- ValueError: check_hostname requires server_hostname的解决办法
- Windows下如何查看某个端口被谁占用并强制关闭
- 算法导论-堆排序习题解
- 《每日一剂》适配器刷新报错adapter.notifyDataSetChanged()解决
- TCP转输控制协议(转)
- Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
- 编写可维护的javascript代码---开篇(介绍自动报错的插件)
- from表单requried属性效果
- Cisco Packet Tracer 思科命令缩写
- DSPTMS320C6678的数据导入方法
- 弗吉尼亚理工大学计算机科学,美国弗吉尼亚理工大学计算机科学本科.pdf
- 何为企业?何以“大而能用,大而有当”?|一点财经
- vmware虚拟机和云服务器区别,容器云与虚拟机云区别
- 微信小程序 首次进入加载引导页
热门文章
- xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
- 访问本地环境时出现The requested URL / was not found on this server.
- 梯度提升(Gradient Boosting)算法
- 《增长黑客》- 读书笔记(一)
- 将整数翻译成英文(C++)
- 【Bootstrap】选择折叠项collapse
- 3DMax2014试用结束后激活教程
- 最GIS应用案例——告诉你什么是GIS!
- miniprogram-ci官方文档
- impress.js css模板,使用impress.js制作幻灯片