ListView控件使用总结
Android开发中ListView是比较常用的组件,他用列表的形式显示数据,根据数据的长度自动的增长列表在实际的开发中使用比较多,之前做的音乐播放器中已经使用到这个组件,为了自己加深理解并且为了和大家分享我稍微进行了整理并写了一例子以供大家相互学习。
一.ListView使用ArrayAdapter绑定数据
默认情况下,ArrayAdapter绑定每一个对象的toString值到layout
中预先定义的TextView控件上。
在布局activity_main.xml文件中加入ListView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > </ListView> </RelativeLayout>
java代码:
package com.example.listviewdemo; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; private String[] datas = { "first", "second", "third", "fourth", "fifth" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化列表 listView = (ListView) findViewById(R.id.listView); // 給列表加载数据 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, datas)); //给列表添加监听器 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub //显示选中的那一项的在数组中的下标 Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_SHORT).show(); } }); } }
运行效果:
使用过程大致是:
1.定义数组存放ListView中item的内容
2.通过ArrayAdapter的构造函数来创建一个ArrayAdapter的对象
3.通过ListView的setAdapter()方法绑定ArrayAdapter的对象
注意ArrayAdapter的构造方法有很多,上面使用的仅仅是其中的一种
第一个参数this是指的上下文,
第二个参数比较重要,这里android.R.layout.simple_expandable_list_item_1
的这个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID。
第三个参数为ListView的内容。其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。
二.我们也可以实现带RadioButton和CheckBox的ListView
CheckBox:
android.R.layout.simple_list_item_multiple_choice
或者
android.R.layout.simple_list_item_checked
RadioButton:
android.R.layout.simple_list_item_single_choice
设置选择模式的两种方法:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
设置选择模式的方法也可以在xml布局文件中声明:
android:choiceMode="multipleChoice"
注意若没有设置选择模式选择框是不会被选中的
android.R.layout.simple_list_item_multiple_choice android.R.layout.simple_list_item_checked
上面这两个参数对单选还是多选并没有影响。
有影响的是listView.setChoiceMode()方法
实现带CheckBox的ListView代码:
// 給列表加载数据
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, datas)); android:choiceMode="multipleChoice"
实现带CheckButton的代码是
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, GetSQLiteMusic._titles)); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
下面是两个简单的例子:
xml布局文件同上面activity_main.xml文件
java代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化列表 listView = (ListView) findViewById(R.id.listView); // 給列表加载数据 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, datas)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // simple_expandable_list_item_1 //给列表添加监听器 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub //显示选中的那一项的在数组中的下标 Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_SHORT).show(); } }); }
运行效果:
实现带RadioButton的代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化列表 listView = (ListView) findViewById(R.id.listView); // 給列表加载数据 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, datas)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //给列表添加监听器 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub //显示选中的那一项的在数组中的下标 Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_SHORT).show(); } }); }
运行效果:
三. ListView使用SimpleAdapter
SimpleAdapter的使用非常简单,扩展性好,可以定义各种各样的布局出来,同时它的功能也非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。现在我们主要讨论一下自定义SimpleAdapter显示ListView的例子。
Xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/img" android:textColor="@android:color/black" android:textSize="15sp" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/title" android:layout_below="@id/title" android:textColor="@android:color/black" android:textSize="13sp" /> <TextView android:id="@+id/tvTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:textSize="22sp" /> </RelativeLayout>
java:
package com.example.listviewdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化列表 listView = (ListView) findViewById(R.id.listView); String[] from = new String[] { "title", "info", "time","img" }; int[] to = new int[] { R.id.title, R.id.info,R.id.tvTime, R.id.img }; SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.list_item, from, to); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 显示选中的那一项的在数组中的下标 Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); } }); } private List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "G1"); map.put("info", "google 1"); map.put("time", "time 1"); map.put("img", R.drawable.p1); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G2"); map.put("info", "google 2"); map.put("time", "time 2"); map.put("img", R.drawable.p2); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G3"); map.put("info", "google 3"); map.put("time", "time 3"); map.put("img", R.drawable.p3); list.add(map); return list; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
运行效果:
相关推荐
学习C#必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
安卓基本知识总结,包括GridView,Spanner,ProgressBar,Fragment,WebView,ListView等
如何处理listview的下载图片时候多线程并发问题,我这里参考了一些网络的资源和项目,总结了一下。希望能对有这些方面疑惑的朋友有所帮助。(listview和gridview,viewpager同一个道理,大家举一反三)。这里涉及到...
想总结一些安卓的实用小功能,也总结和回顾一下安卓知识点,也希望大家提出代码改进建议。谢谢大家 实现该功能要点是设置ListView的android:choiceMode="singleChoice"。 欢迎提出意见,如果您有更好的方式请告诉我...
JAVA基础知识点总结.doc 第1章 Java程序设计概述 第2章 Java语言的开发环境 第3章 Java程序的基本结构 第4章 对象和类 第5章 继承和多态 第6章 泛型程序设计 第7章 接口和内部类 第8章 异常处理 第9章 反射,代理,...
或去google code找些开源的代码下来研究,学习人家的设计思想、模块功能的划分、代码组织结构等知识 这个过程中,涉及到的知识比较多,如版本管理工具SVN、Git、Mercurial,如设计模式Android实训实习报告总结全文共...
http://blog.csdn.net/loveqRc/article/details/53689049 Android知识总结--ListView的BaseAdapter抽取
网上收集和自己总结的一些android使用资料,比较基础的知识,对全面了解一些知识很不错的 android ListView美化.docx androidshape.docx android_textview.设置文本属性.docx android_设置字体样式.docx ...
Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ListView详解 RecyclerView和ListView的异同 AsyncTask源码分析 插件化技术 ...
Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ListView详解 RecyclerView和ListView的异同 AsyncTask源码分析 插件化技术 ...
新闻客户端案例共有四个界面,分别是新闻、贴吧、知道和图库。... 新闻客户端案例使用百度提供的接口获取百度数据。...该案例是一个综合性较为全面的应用,通过该案例的学习可以对基础只是做一个总结并掌握更深的知识。
VB.Net-C#代码集合-Word格式有图片,有的讲的不错,学习知识点。包括下面的文章: NET环境下水晶报表使用总结 NET中各种数据库连接大全 Visual C#的Excel编程 Visual C#中的数据绑定 把.NET程序部署到没有安装.NET...
简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了...
base-adapter-library是鸿洋的封装的adapter一个库,挺好用的,有listView的adapter,RecycleView的adapter。 下面是一些界面的截图和说明总结: 首页 首页分为4个部分,基础知识,进阶特效、高级、实例 基础部分 ...
通过将这些知识总结到一起,闲暇的时刻翻一翻,就当是给自己充充电了。 更新时间: 2015-1-31 包含的功能: 控件: ListView、TextView 系统:PackageManager、像素密度等等 媒体:MediaPlayer 文件:存储
今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套ListView,都是上下滑动,这该如何...
最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 Android入门逆引手册 Android...
10.7 ListView 10.7.1 分组 10.7.2 分页 10.8 DetailsView和FormView 10.8.1 DetailsView 10.8.2 FormView 10.9 高级网格 10.9.1 GridView中的汇总 10.9.2 单个表中的父/子视图 10.9.3 使用查找...
知识总结 翻着 .:::a:a:.:::a:B:a:::::..aa:::.:.aa:.:aa::: 86 41.1核心技能目标 86 412知识体系总结… 86 4.2 综合实训 任务1:制作月份日历 任务2:数组数据添加和排序. 错误!未定义书签 任务3:自杀游戏… 错误...