再探ListView的使用和优化
来源:互联网 发布:专业校对软件 编辑:程序博客网 时间:2024/05/21 14:57
作者在差不多一年之前的时候开始学习安卓,现在也差不多一年了,刚开始学习的时候是通过看视频,看的是老罗的视频,配的书是《安卓从入门到精通》,因为当时断断续续的,所以虽然对ListView有些了解,也知道怎么用,但是还是有些边边角角没有涉及到,这次又用到了,所以索性就把这个点全部扫一遍。
再探ListView开发
ListView里面最重要的就是适配器
SubAdapter(当前上下文,ListView子项布局的ID,以及要适配的数据)
简单的文本ListVIew
(1)在一个布局文件中,拖入或者自己写一个ListView控件并设置
android:layout_width=”match_parent”
android:layout_height=”match_parent”
(这样ListView会布满整个布局空间)
(2)ListView用于展示大量数据的,但是又无法又没有办法直接传递给ListView,所以我们要借助适配器来完成。
Android本身提供了很多适配器得实现类,ArrayAdapter是最好用的一个(可以指定要适配的泛型,本身也有多个构造函数的重载)
ArrayAdapter(当前上下文,ListView子项布局的ID,以及要适配的数据)
如果是自定义的:第二个参数为自定义的子类的布局文件的XML名称
android.R.layout.simple_list_item_1 :是一个Android内置的布局文件,里面只有一个TextView,可用于简单的额显示一段文本。
定制的ListView界面
(1)定义一个实体类作为ListView适配器的适配类型(书中的是Fruit,公司的是Beacon)
(2)定义子界面布局文件
(3)创建自定义的适配器(还是继承自ArrayAdapter,泛型设为上面的实体类类型)
自定义的适配器重写了
Public SubAdapter(Context context,int textViewReaourceID,List<T> objects)
父类的一个构造函数(上下文,ListView子项布局ID,数据)
@Override
public View getView(int position,View convertView, ViewGroup parent)
getView()方法,这个方法在每个子项被滚动到屏幕内的时候被调用。
在这个方法中,我们可以通过第一个参数获取到的
Fruit fruit = getItem(position);//当前T的对象
源码:
public T getItem(int position) {
return mObjects.get(position);
}
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);//动态加载XML布局文件
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
fruitImage.setImageResource(fruit.getImageId());
//这两句代码是获取子项的布局文件里面的控件,并且通过T取到相关的属性对其进行赋值。
优化ListView:
病因1:自定义控件中getView()方法每次都将布局重新加载了一遍,当ListView快速滚动的时候就会成为性能的瓶颈。
紧接上面:
在这个方法中,我们可以通过第二个参数获取到的
View convertView 这个参数用于将之前加载好的布局进行缓存,以便以后重用
优化:
View view;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
} else {
view = convertView;
}
病因2:View的findViewById()方法每次都被调用
优化:
将控件的实例通过View.setTag(viewHolder)//将ViewHolder存储在View中,使用的时候通过getTag来取出
Tag的解释
设置与此视图关联的标签。一个标记可以用于标记其层次结构的图,并且不必须是在层次结构内是唯一的。标签也可以用来存储一个视图内的数据不诉诸另一数据结构。
ListView的子项的点击事件:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
}
});
/**
* Callback method to be invoked when an item in this AdapterView has
* been clicked.
* <p>
* Implementers can call getItemAtPosition(position) if they need
* to access the data associated with the selected item.
*
* @param parent The AdapterView where the click happened.
* @param view The view within the AdapterView that was clicked (this
* will be a view provided by the adapter)
* @param position The position of the view in the adapter.
* @param id The row id of the item that was clicked.
*/
void onItemClick(AdapterView<?> parent, View view, int position, long id);
这便是ListView每个子项的点击事件的框架,在里面可以添加你想添加的代码。
- 再探ListView的使用和优化
- ListView的使用和优化
- ListView的优化和使用
- ListVIew的使用和优化
- listView使用和优化
- ListView的简单使用和性能优化
- listview 常见的优化和使用技巧
- ListView 的优化使用
- ListView和RecyclerView的使用和性能优化总结
- listview的基本使用,listview的优化
- Android杂谈--ListView之BaseAdapter的使用和优化
- Android-ListView适配器BaseAdapter的使用和优化
- 【Android UI】ListView的使用和简单优化
- 安卓基础:ListView的简单使用和优化
- ListView 的优化及使用
- Android 使用Listview的优化
- ListView的使用及其优化
- ListView优化--ViewHolder的使用
- Android平滑图片加载和缓存库 Glide 使用详解
- Mysql学习中遇到的一些问题
- 二叉树
- linux下部署项目一(安装JDK)
- 关于echarts 图标的 demo
- 再探ListView的使用和优化
- PCB覆铜要点和规范(基于allegro)
- libevent源代码文件组织
- oracle case when then else end
- eclipse 安装svn插件
- ListView.setOnItemClickListener 点击无效
- Windows C++ log4cplus编译开发配置详细步骤
- iOSUITableViewCell滑动显示多个按钮
- 隐马尔科夫模型(HMMs)之四:前向算法