ListView性能优化
2016-05-10 16:42
423 查看
1.在MainActivity中,定义MyAdapter继承BaseAdapter,并且实现getCount(),getItem(),getItemId(),getView()的方法。在getView()方法中进行数据填充并且返回列表项视图。使用ListView的setAdapter()方法设置MyAdapter适配器。
2.性能优化:
(1)在getView(int position, View convertView, ViewGroup parent)方法中,重复使用convertView减少对象的创建。
(2)在MyAdapter中定义内部类ViewHolder,用于保存第一次查找的组件,避免下次重复查找。
MainActivity如下:
activity_main.xml如下:
list_item.xml如下:
2.性能优化:
(1)在getView(int position, View convertView, ViewGroup parent)方法中,重复使用convertView减少对象的创建。
(2)在MyAdapter中定义内部类ViewHolder,用于保存第一次查找的组件,避免下次重复查找。
MainActivity如下:
public class MainActivity extends ActionBarActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); listView.setAdapter(new MyAdapter(this)); } static class MyAdapter extends BaseAdapter{ private String[] titles = {"title-1","title-2","title-3","title-4","title-5", "title-6","title-7","title-8","title-9","title-10", "title-11","title-12","title-13"}; private int[] icons = {android.R.drawable.ic_input_add, android.R.drawable.ic_delete, android.R.drawable.ic_dialog_email, android.R.drawable.ic_dialog_info, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map, android.R.drawable.ic_dialog_map}; private Context context; public MyAdapter(Context context){ this.context = context; } @Override public int getCount() { return titles.length; } @Override public Object getItem(int position) { return titles[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //优化第二步:使用ViewHolder提高在容器中查找组件的效率 ViewHolder vh; //优化1:重复使用convertView,减少对象的创建 if(convertView==null){ LayoutInflater inflater = LayoutInflater.from(context); //实例化一个布局文件 convertView = inflater.inflate(R.layout.list_item,null); vh = new ViewHolder(); vh.iv = (ImageView) convertView.findViewById(R.id.imageView); vh.tv = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(vh); }else{ vh = (ViewHolder) convertView.getTag(); } vh.tv.setText(titles[position]); vh.iv.setImageResource(icons[position]); return convertView; } //内部类,用于保存第一次查找的组件,避免下次重复查找 static class ViewHolder{ ImageView iv; TextView tv; } }
activity_main.xml如下:
<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
list_item.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="16dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textView" android:paddingLeft="10dp"/> </LinearLayout>
相关文章推荐
- 面向对象的六大原则
- java多线程join
- magento 属性与属性集配置attributes
- 超详细的prim算法
- maven 仓库收到导入jar包
- 2016.5.10
- SQL中NVL函数的用法
- 将功补过 树形动态规划
- android apk反编译
- 基于STM32F4的四轴航拍飞行器(开源)
- 树莓派设置静态无线IP以及去掉启动时的dhcpcd
- html5-localStorage本地存储和SQLLite本地数据库
- Maven与Sonar配合使用
- hdu3551 Hard Problem 【一般图匹配】
- 获取LayoutInflater的三种方法
- 配置使用Android数据库开源框架GreenDao
- nexus maven私服发布Android library
- 系统自带的NSJSONSerialization解析json文件
- Windows 之 win10快捷键
- [leetcode] 154. Find Minimum in Rotated Sorted Array II