Android------------------ListVIew学习
一、ListActivity : 如何你的Activity仅涉及到一个列表(ListVIew),那么你就该考虑使用ListActivity这个类
注意事项:1.ListActivity 里面默认包含显示的ListView视图
2.想自定义布局且显示出来,必须把ID设置为 android:id = “@id/list”
否则系统会报出这样的错误: Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
public class TextActivity extends ListActivity {
private String[] objs = {"北京", "上海", "天津"};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(TextActivity.this,
R.layout.listview1, R.id.line3, objs);
setListAdapter(adapter);
}
}
activity_main.xml文件内容显示
<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"
tools:context=".MainActivity">
<ListView
android:id="@+id/line1" ---------------->致命的错误,它的ID必须为list才能编译过
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</LinearLayout> 二、ListView的点击事件 1.onItemClickListener : 当有一个item被点击触发的时候,它的回调函数是onItemClick()
2.在ListActivity中使用item点击事件时候,需要重写onItemListener()这个函数
3.读取xml文件中的数据方式:
couse.xml文件
<resources>
<string-array name="course">
<item> 嵌入式</item>
<item> C语言</item>
<item> Java</item>
<item> Android</item>
</string-array>
</resources>
private String [] objs;
objs = MainActivity.this.getResources().getStringArray(R.array.course);
4.SimpleAdapter的创建数据源的方法
List<Map<String , Object> >dataSource1= new ArrayList<Map<String ,Object>>(); //这个比较使用起来好一些
List<Map<String , String>> dataSource1= new ArrayList<Map<String, String>>();
Map<String , Object> map = new HashMap<String , Object>(); //这个比较使用起来好一些
Map<String, String> map = new HashMap<String, String>(); //new出数据源的对象
map.put("name" , "小明");
map.put("age" , "23");
dataSource1.add(map); //new ArrayList<Map<String, String>>();
//不执行会报出on a null object reference 会爆出空引用的错误
5.adpater.notifyDataSetChangge() : 可以重新调用listView.setAdapetr来刷新数据 , 更新数据一定要有mlist.add()的方法才可以刷新数据
三、继承BaseAdapter的重写的方法
1.getCount : 得到数据的个数
2.getItem : 得到项目
3.getItemID : 的到项目的ID
4.getView : 得到视图View
四、ListView的优化性能
1.不使用listView.addView来添加视图,这个机制是由adapter来实现的
(1).优化view的方法
view重复利用的话,可以减少创建view的次数,从而来减少cpu的消耗

public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
//防止解析布局多次重复解析来浪费cpu
if(convertView == null)
view = getLayoutInflater().inflate(R.layout.listexercise, parent, false);
(2).优化控件
减少多次查找findViewById次数来达到优化:

//创建持有者HoldView的方法

public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder = null;
if (null == convertView)
{
viewHolder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(mContext);
convertView = mInflater.inflate(R.layout.item_marker_item, null); viewHolder.name = (TextView) convertView.findViewById(R.id.name);
viewHolder.description = (TextView) convertView
.findViewById(R.id.description);
viewHolder.createTime = (TextView) convertView
.findViewById(R.id.createTime); convertView.setTag(viewHolder); //setTag还需要深入学习
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
private static class ViewHolder
{
TextView name;
TextView description;
TextView createTime;
} 五、关于view的setTag有一个坑来注意一下

converView.setTag("pic",picHolder);
converView.getTag("pic");
项目会Crash,开始抛出IllegalArgumentException的问题了
解决办法:
那么我们要怎么实现唯一的key呢?其实我们可以把key定义在资源文件中,再由编译器生成对应的,唯一的id!因此我们可以这样写在项目的资源res/values/string.xml中:

converView.setTag(R.id.tag_text,picHolder);
converView.getTag(R.id.tag_text);
Android------------------ListVIew学习的更多相关文章
- [Android]ListView学习笔记
基本用法流程 创建Adapter并且派生自BaseAdapter,实现其必要的接口方法 将创建的Adapter分配给ListView对象:mPhoneBookListView.setAdapter(p ...
- Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)
Android UI学习 - ListView -- :: 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据 转载请注明出处:h ...
- Android -- ListView与ArrayAdapter、SimpleAdapter
对于ArrayAdapter,里面虽然能添加图片,但只能是相同的图片. 废话不多说: 布局&&list的item布局 ...
- Android -- ListView与Adapter
ListView在Android中有着很重要的作用.Android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示. 背景 ...
- Android ListView工作原理全然解析,带你从源代码的角度彻底理解
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- Android ListView异步载入图片乱序问题,原因分析及解决方式
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android全部系统自带的控件其中,ListView这个控件算是 ...
随机推荐
- jquery-jsonp插件解决跨域问题
用jquery-jsonp插件解决ajax跨域问题,既可以实现ajax同样的请求效果,而且server服务端的相关代码也不用做任何改变. 代码如下: var url="http://loca ...
- MySql删除表、数据
程度从强到弱 1.drop table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 ...
- Python打杂之路
1.任务要落到纸上好记性不如烂笔头,再好的记性也不如写到纸上明确无误,写到纸上就不用担心会漏掉哪项工作.平时,我们总是在忙着一项工作的同时还惦记着下一项工作,把工作都记下后,我们就可以专注于一项工作, ...
- html菜单和课程表
菜单: <html> <head> <meta charset="utf-8"> <title>菜单练习</title> ...
- loadrunner12.5-添加检查点
1.点击缩略图资源管理器,找到需要添加检查点的页面. 2.选中需要添加检查点的页面,切换到快照tab,选择“树”型显示方式. 3.在响应窗口下,找到需要添加的检查点的内容,选中--右键--添加文本检查 ...
- Mathtype使用技巧
1. 打开/关闭MathType窗口 Alt+Ctrl+q:插入inline公式 Ctrl+S:更新公式到Word相应位置 Alt+F4:保存并关闭MathType窗口,返回Word. 2. 公式 ...
- bitnami redmine svn配置
采用bitnami 方案安装redmine svn服务器端会自己进行安装 1.创建版本库 首先进入remine安装目录的subversion/bin目录,例如我的安装目录是“/opt/redmine/ ...
- 100 floors 2 eggs
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
- java浅拷贝和深拷贝
转:http://blog.csdn.net/u014727260/article/details/55003402 实现clone的2点: 1,clone方法是Object类的一个方法,所以任何一个 ...
- thinkphp5集成H-ui后台(五)集成webUploader
在所有的编程语言中,都有对文件上传处理的知识点,这里不多赘述.在H-ui中,有一个功能强大的文件上传组件webUploader,今天就来说明和集成一下它. 先看一下webUploader集成后的效果: ...