listView基本实现
1.getView()界面每显示一行都会调用getview()方法
2.初始化数据
在getview()
lsitveiw复杂行布局的实现
1.创建行布局文件 Ctrl+N
2.getview()设置行布局文件
//1.获得布局转换器
LayoutInflater inflater = getLayoutInflater();
//2.将行布局文件转换为View对象
View layout = inflater.inflate(R.layout.list_item, null);
//3.查找行布局中的控件
TextView tvTitle = (TextView) layout.findViewById(R.id.tv_title);
TextView tvSubTitle = (TextView) layout.findViewById(R.id.tv_subtitle);
return layout;
使用自己创建的适配器对象
1.创建一个类继承BaseAdapter{重写四个方法}
2.使用
数据封装
1.创建一个类保存每一行的数据
成员变量类型 个数 取决于 行的控件所要保存的数据
创建带参的构造方法 get() set()
2.创建容器保存Data数据
ArrayList<Data> list=new ArrayList<Data>();
3.初始化数据
4.getview()获得每一行的数据 Data
空指针
错误:
(TextView) findViewById(R.id.tv_subtitle);
正确:
(TextView) layout.findViewById(R.id.tv_title);
优化
1.复用行布局
只需要创建界面可见最多行的布局对象,其他界面不可见的行,复用界面消失的行布局
convertView:保存即将消失的行布局对象索引
注意:getview()中的变量不要声明为成员变量
1.//判断convertView是否为空
View layout =null;
if (convertView==null) {//convertView为空就创建界面可见最多行的布局对象
//获得布局转换器
LayoutInflater inflater = getLayoutInflater();
//将行布局文件转换为View对象
layout = inflater.inflate(R.layout.list_item, null);
}else {//convertView不为空,说明convertView保存了消失的行布局对象索引
就复用消失的行布局对象
layout=convertView;
}
优化二:减少控件查找次数
实现步骤:
1.创建ViewHolder类:保存查找到的控件的索引 (笔记)
2.保存查找到的控件索引 并且 为布局设置标签(保存viewHolder索引)
3.复用的行 只需要从标签里拿到控件的索引 不需要再次findviewbyid()
查找控件
ListView 数据更新
1.对容器进行操作
2.适配器通知ListView更新界面 通过调用mAdapter.notifyDataSetChanged();
Listveiw行点击事件
1.普通点击事件
2.长按点击事件
行点击事件失效
1.行布局中放入Button 控件抢占焦点
在抢占焦点的控件中设置: android:focusable="false"
在最外层布局设置:
android:descendantFocusability="blocksDescendants" >
1. 为Listview注册上下文菜单
registerForContextMenu(mListView);
2.设置长按点击事件 保存长按行的行号
3.重写onCreateContextMenu();
4.重写onContextItemSelected();菜单点击事件
转载于:https://blog.51cto.com/1206995290qq/1830799
listView基本实现相关推荐
- Android ListView 点击item改变item的背景颜色(ListView实现光标移动)
一下demo 地址 实现的效果图如下 ListView 光标移动,实现很是简单,这里是指item背景的改变 使用 listSelector listSelector 用户指定当前选中item 的颜色 ...
- Android ListView 删除 item
实现效果 主要使用方法 是, remove 之后在刷新界面 adapter 里面的代码 public class MyAdapter extends BaseAdapter {private List ...
- ListView 添加头部 和尾部 布局 (addHeaderView 和 addFooterView)
ListView 添加头部 和尾部 布局 其实很简单 ,listview 暴露的有方法addHeaderView 和 addFooterView 从源码里面可以看到, addHeaderView 和 ...
- Android ListView item设置分割线以及分割线宽度
ListView item设置分割线的方法:setDivider ListView item设置分割线宽度的方法:setDividerHeight // 设置分割线 listView.setDivid ...
- Android ListView (多个adapter 说明)
最近维护项目,项目里面使用的都是ListView 这里也对ListView 回顾一下 以下 demo 地址 ListView 在Android 里面用来实现列表的, 在xml 中创建ListView ...
- 玩转android自定义控件二——自定义索引栏listview
带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...
- ListView style
步骤一:在使用的ListView的activiey里使用android:theme="@style/Theme的名字" 步骤二:创建Themes.xml 在Themes.xml里定 ...
- Android自定义ListView的Item无法响应OnItemClick的解决办法
转: 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就 ...
- 【原创】ListView快速滚动至新添加一行(自动滚动)
在C#开发中我们经常要开发一些日志系统,尤其是基于ListView的日志显示系统. 但是当日志增多是你是否有一些困扰,就是它为什么不会自动滚动至最后一行. 以下是一小段代码,希望可以帮助你. publ ...
- Android使用ListView控件问题
Android使用ListView控件问题: The application has stopped unexpectedly, please try again. 开发环境:android 1.6 ...
最新文章
- java取网页数据_浅析JAVA实现网页取内容
- php安装问题_PHP安装十大经典问题
- 通过微软的cors类库,让ASP.NET Web API 支持 CORS
- 系统程序员成长计划-组合的威力
- 【软件工程】关于计算机的一些问答与思考
- 最实用的logback讲解(2)—appender
- 用C++实现的壳(基础版)
- Error -Cannot add direct child without default aggregation defined for control
- 【课程】MIT最新深度学习课程集
- myeclipse2017安装与破解
- Java 算法 字符删除
- java 字典 引用_java中数据字典的使用
- 《Python学习笔记》——南溪的python编程笔记
- MATLAB中的光照处理
- LigerUI学习使用
- 响应面matlab算法,结构可靠度分析的响应面法及其Matlab实现参考文件.pdf
- NANDFlash原理
- Vue安装环境最全教程,傻瓜式安装
- macOS 虚拟摄像头:CamTwist for Mac
- jQuery实用网页元素颜色修改插件