viewholder的使用
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。
优化的思路两种:
1. View的重用
View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断
2.ViewHolder的应用
View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。
package com.example.android_listview_activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; /** * @desc 自定义适配器 * @author ljt * @time 2014年8月27日 上午11:15:27 */ public class MainActivity5 extends Activity{ private static final String TAG = "MainActivity"; private ListView listView; private ImageView imageView; private TextView textView; private ViewHolder holder; private int[] images = {R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light, R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light }; private String[] names = {"北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海", "北京","上海" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)this.findViewById(R.id.listView1); MyAdapter adapter = new MyAdapter(); listView.setAdapter(adapter); } /** * @desc 自定义适配器 * @author ljt * @time 2014年8月27日 上午11:09:13 */ class MyAdapter extends BaseAdapter{ /** * How many items are in the data set represented by this Adapter. */ @Override public int getCount() { return names.length; } /** * Get the data item associated with the specified position in the data set. */ @Override public Object getItem(int position) { return names[position]; } /** * Get the row id associated with the specified position in the list. */ @Override public long getItemId(int position) { return position; } /** * 创建列表项 */ @Override public View getView(int position, View convertView, ViewGroup parent) { Log.i(TAG, "position == "+position); if(null == convertView){ // 将layout的xml布局文件实例化为View类对象 convertView = getLayoutInflater().inflate(R.layout.source2,null); imageView = (ImageView)convertView.findViewById(R.id.imageView3); imageView.setImageResource(images[position]); textView = (TextView)convertView.findViewById(R.id.textView3); textView.setText(names[position]); holder = new ViewHolder(); holder.imageView = imageView; holder.textView = textView; convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); holder.imageView.setImageResource(images[position]); holder.textView.setText(names[position]); } return convertView; } } class ViewHolder{ private ImageView imageView; private TextView textView; } }
相关推荐
- **布局(Layout)**:划分页面区域,允许动态调整大小,适合构建复杂的页面结构。 - **面板(Panel)**:可嵌套的容器,支持标题、工具栏、加载提示等功能。 - **窗口(Window)**:浮动的可调整大小的容器,常...
- EasyUI还包含许多其他组件,如tabs(选项卡)、layout(布局)、slider(滑块)等,丰富了Web应用的界面和交互。 在实际项目中,结合jQuery 1.7和EasyUI API,开发者可以构建出功能强大且用户友好的Web应用,...
5. **布局管理**:`layout`组件允许用户创建复杂的布局结构,如北部、南部、东部、西部和中心区域,方便地调整页面元素的位置和大小。 6. **导航和菜单**:`menu`和`toolbar`组件用于创建各种导航和工具栏,可以...
Thesis 1.7 – Wordpress Theme.zip Introducing the Thesis Theme for WordPress Thesis is a search engine optimized ...
《迷迪虚拟钢琴_1.7:电脑键盘上的音乐创新》 迷迪虚拟钢琴是一款深受音乐爱好者喜爱的软件,版本为1.7,它巧妙地将电脑键盘转换为钢琴键,让用户无需实体钢琴就能享受演奏的乐趣。这款软件的特色在于其便捷性和...
7. **Layout**:这也是一个文件夹,可能包含不同的键盘布局设置或者用户自定义的布局。这有助于适应不同用户的演奏习惯或者特定钢琴的键位布局。 综上所述,"迷迪虚拟钢琴_1.7.zip" 提供了一个完整的虚拟钢琴体验,...
用户还可以利用新的布局组(Layout Groups)来自动调整UI元素的位置和大小,以适应不同分辨率和屏幕尺寸。 动画是2D游戏的灵魂。Unity 2D Toolkit包含了 Animator Controller,这是一个直观的工具,用于创建和管理...
在射频PCB Layout设计中,直角走线的影响一直是工程师关注的焦点。直角走线之所以要尽量避免,是因为它会对信号的传输质量产生负面影响,这一影响主要体现在信号传输的三个重要方面。 首先,直角走线会导致传输线...
6. **布局(Layout)**:提供了窗口管理器(Resizable)、可折叠面板(Accordion)、堆叠面板(Stacked Panels)等布局组件,帮助构建复杂的页面结构。 综上所述,jQuery 1.7.2 API和jQuery UI API提供了强大的前端...
这个名为"Mytest1add1.7z"的压缩包文件包含了一个Android计算器的源代码,供开发者学习和参考。这个计算器Demo是作者在学习过程中创建的,旨在帮助其他有相同需求的学习者。下面我们将深入探讨相关的Android开发知识...
JumboCAD EDA is professional schematic & PCB layout software. JumboCAD EDA include 3 packages. JumboCAD Schematic Capture, JumboCAD PCB designer & JumboCAD Library editor
匿名发布了所有正式发布的MS主题的反汇编版本(Royale / Zune / Embedded等),这些反汇编版本只是插入到现有的源代码中,然后将作为常规构建的一部分进行构建,并对layout.inx,它们也可以自动包含在我们的版本中。...
*) And it is a fixed layout which means even on my big screen I have to scroll all the way down and have to scan for it. There have to be a better way, obviously. The alternative Rails documentation ...
•Zend Framework 1.7 •Zend Framework 1.6 •Zend Framework 1.5 •Zend Framework 1.0 •Zend Framework 0.9 •Zend Framework 0.8 •Zend Framework 0.6 •Zend Framework Coding Standard for PHP •...
Section 1.7. Dependency Properties Section 1.8. Resources Section 1.9. Styles and Control Templates Section 1.10. Graphics Section 1.11. Application Deployment Section 1.12. Where Are We? ...
一个支持多种状态的自定义视图,可以方便的切换到:加载中视图错误视图空数据视图网络异常视图内容视图使用dependencies { implementation ' com.classic.common:multiple-status-view:1.7 '}示例< ...
#Gephi-ForceLayout要运行此jar文件,应使用Java 1.7。 ##用法:java -jar gephi-toolkit-demos2-1.0-SNAPSHOT-jar-with-dependencies.jar input_seq.fas input_vector.csv output1.txt output2.txt output3.txt ...
- 布局组件:用于页面布局的组件,例如Layout布局、Affix固钉、Breadcrumb面包屑等。 - 数据录入组件:包括AutoComplete自动完成、Cascader级联选择、Checkbox多选框等用户输入的组件。 - 数据展示组件:用于展示...
例如,对于二次电路内部,当额定电源电压小于等于300V时,基本绝缘的电气间隙应为1.7mm,而加强绝缘则要求2.5mm。 爬电距离和电气间隙的设定需遵循相关行业标准,如IEC 60335、UL 1012、GB/T 4793等。设计时必须...
在使用jQuery UI 1.7版本的dialog组件时,遇到了一个困扰的问题:对话框只能弹出一次。这在进行删除操作时尤为明显,因为通常需要在用户确认后才执行删除动作。原先使用的“确认删除”的方法在这一版本中失效,导致...