ListView缓存优化
2016-04-08 13:48
676 查看
说明
——说到ListView,大家就会想到Adapter,GridView、ListView都离不开Adapter。而Adapter最重要的方法是使用getView()来绘制页面,今天我来讲解一下ListView的缓存优化问题。XML布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
ListView的Item
<?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="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="50sp" android:id="@+id/tv"/> </LinearLayout>
主要方法
package com.example.listview; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; /** 1. ListView分布加载 2. @author WangJ 3. */ public class MainActivity a285 extends Activity { private String[] tv = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" }; private ListView mListView; private ArrayList<String> mlist = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.list); for (int i = 0; i < tv.length; i++) { mlist.add(tv[i]); } mListView.setAdapter(new mListAdapter(getApplicationContext(), mlist)); } class mListAdapter extends BaseAdapter { private Context context; private ArrayList<String> list; public mListAdapter(Context context, ArrayList<String> list) { this.context = context; this.list=list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View converview, ViewGroup arg2) { System.out.println("getView " +position +" "+ converview); ViewHolder viewHolder = null; if (converview == null) { converview = View.inflate(context,R.layout.listview_item, null); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) converview.findViewById(R.id.tv); converview.setTag(viewHolder); } else { viewHolder = (ViewHolder) converview.getTag(); } viewHolder.textView.setText(list.get(position)); return converview; } } class ViewHolder { private TextView textView; } }
[b]运行效果如图[/b]
这样就能利用ViewHolder 来让ListView每次不重复加载不必要的数据,从而优化内存
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories