博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓开发入门教程-UI控件_ListView
阅读量:1894 次
发布时间:2019-04-26

本文共 3487 字,大约阅读时间需要 11 分钟。

关注 ,免费获取全套安卓开发学习资料

什么是ListView

ListView是用于显示列表的UI控件.不过当前主流的已经是RecyclerView了,更强大,更好用.

基础样例

效果图

方案简要介绍

  1. 在activity对应的布局文件中增加ListView
  1. 新增一个Adapter用于展示列表中每一行内容(含对应布局文件)
    详见下面完整代码中的ListViewAdapter及其布局文件.
  2. 在activity中实例化Adapter,设置数据,并将adapter设置给ListView
private fun initListView() {
var dataList = getData() val adapter = ListViewAdapter(this) adapter.setData(dataList) listView.adapter = adapter //隐藏自带的分隔符,在ListViewAdapter对应的布局里自定义分隔符,这样可以更灵活。 listView.divider = null //添加点击事件 listView.setOnItemClickListener {
adapterView, _, position, _ -> val text = adapterView.getItemAtPosition(position).toString() toast(text) }}private fun getData(): List
{
val dataList = ArrayList
() for (index in 0 until 100) {
val text = " 数据$index " dataList.add(text) } return dataList}

完整代码

  1. activity代码:MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initListView() } private fun initListView() {
var dataList = getData() val adapter = ListViewAdapter(this) adapter.setData(dataList) listView.adapter = adapter //隐藏自带的分隔符,在ListViewAdapter对应的布局里自定义分隔符,这样可以更灵活。 listView.divider = null //添加点击事件 listView.setOnItemClickListener {
adapterView, _, position, _ -> val text = adapterView.getItemAtPosition(position).toString() toast(text) } } private fun getData(): List
{
val dataList = ArrayList
() for (index in 0 until 100) {
val text = " 数据$index " dataList.add(text) } return dataList } /** * 显示toast短暂提示 */ private fun toast(text: String) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()}
  1. MainActivity对应布局文件: activity_main.xml
  1. ListView对应Adapter: ListViewAdapter
class ListViewAdapter(var context: Context) : BaseAdapter() {
private var mDataList = mutableListOf
() /** * 设置数据 */ fun setData(dataList: List
) {
mDataList.clear() mDataList.addAll(dataList) //数据变更后,需要调用notifyDataSetChanged通知数据变化。 notifyDataSetChanged() } override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View {
var viewHolder: ViewHolder var view: View //下面对convertView进行判断,是为了复用已存在的视图,提升效率。 if (convertView == null) {
view = View.inflate(context, R.layout.item_layout, null); viewHolder = ViewHolder(view) view.tag = viewHolder } else {
view = convertView viewHolder = view.tag as ViewHolder } //获取当前位置数据 val item = getItem(position) //显示用户名 if (item is String) {
viewHolder.nameTv.text = item } return view } override fun getItem(position: Int): Any {
return mDataList[position] } override fun getItemId(position: Int): Long {
return 0 } override fun getCount(): Int {
return mDataList.size } class ViewHolder(view: View) {
var nameTv: TextView = view.findViewById(R.id.nameTv) }}
  1. ListViewAdapter对应布局文件: item_layout.xml

基础样例完整源代码


安卓开发入门教程系列汇总

开发语言学习

UI控件学习系列

关注头条号,第一时间获取最新文章:

转载地址:http://gwodf.baihongyu.com/

你可能感兴趣的文章
知道如何操作还不够!深入了解4大热门机器学习算法
查看>>
10种算法一文打尽!基本图表算法的视觉化阐释
查看>>
未来属于人工智能工程师,但成功转型不容易
查看>>
科技界“挠头”:困扰科技界可持续发展的难题
查看>>
标准出现问题,人工智能正在走向错误的方向
查看>>
不论何时,互联网从业者一直幸福着~
查看>>
架构师知识体系全景图
查看>>
guava中EventBus(事件总线)源码分析与使用
查看>>
程序员成神之路文章目录
查看>>
SASS软件的成熟度模型总结
查看>>
一次搞定redis使用
查看>>
最全架构设计实践方法论: 微服务
查看>>
linux入门--磁盘管理之分区、格式化与挂载
查看>>
开发必备:HTTP 及 TLS
查看>>
如何设计自己的第一个加密交易机器人?
查看>>
TKDE 2020 | 综述:基于知识图谱的推荐系统
查看>>
休息时间!哪些业余活动能提升开发人员的技能?
查看>>
在后台的python:众多程序员无法攻克的难题
查看>>
国会大厦骚乱,与一家极不可靠的面部识别公司……
查看>>
电动汽车的“专属危险”:网络威胁问题不容小觑
查看>>