ListView详解(ConvertView优化)
来源:互联网 发布:linux如何安装迅雷 编辑:程序博客网 时间:2024/05/18 03:41
概念:ListView在andoid应用中很常见,用于显示列表, 一个列表表示一行,显示自定义的View,继承baseAdapter ,这点很重要...ListView的每个条目都是一个View;
MVC概念: 在此案例中 , 模型层 moder 就是集合List对象,用户查看想要数据的集合 视图层 View ListView ,如何显示,显示什么 , 控制层 control ,就是Adapter
Adapter:ListView的Adapter最重要的Adapter是baseAdapter ,覆盖里面两个方法很重要,见代码;
优化:BaseAdapter内部的,getView方法每次在用户上下滑动的时候,position的值在变化,getView每次在滑动到下一个出现的条目或者上一个出现的条目(界面显示不出来的条目)的时候都会调用getView(),这样很浪费存储空间,稍有不足就会崩,因此,特有缓存参数 convertView,每次显示出来的View都会存入缓存...
getView(publicView getView(intposition, View convertView, ViewGroup parent) {
People p=listArray.get(position); /* 一、 先获取填充器对象 LayoutInflater inflater=LayoutInflater.from(MainActivity.this); 再用布局填充器对象去填充 View vi= inflater.inflate(R.layout.layout_textview,null); 二、获取填充器对象 LayoutInflater inflater=getLayoutInflater(); 再用布局填充器去填充 View vi=infater。inflate(R。layout。layout_textview,null) */ //直接用View将布局文件填充为View ,都是inflate,有好几种实现方法,见上表 View vi=null;
//如果缓存为空,则加载每个条目的View if(convertView==null){ vi = View.inflate(MainActivity.this, R.layout.layout_textview, null); }else{
//如果缓存已有,那么加载缓存的条目就可,不用再重构View vi=convertView; } TextView tv_name= (TextView) vi.findViewById(R.id.tv_name); tv_name.setText(p.getName()); //如果没有vi,那么系统提示是找不到TextView的,系统如果通过findViewById()只会找到主界面的 //id ,如何找到所需布局的id,需要将布局文件填充成View,注意此处 TextView tv_salary= (TextView) vi.findViewById(R.id.tv_salary); tv_salary.setText(p.getSalary()); TextView tv_phone= (TextView) vi.findViewById(R.id.tv_phone); tv_phone.setText(p.getPhone()); return vi;}
}
public class MainActivity extends AppCompatActivity { List<People> listArray=null; MyOpenDatabase my_db=new MyOpenDatabase(this,"people",null,1); ListView listView=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SQLiteDatabase sd=my_db.getWritableDatabase(); listArray=new ArrayList<People>(); Cursor cursor=sd.query("people", null, null, null, null, null, null, null); while(cursor.moveToNext()){ String name=cursor.getString(cursor.getColumnIndex("name")); String salary=cursor.getString(cursor.getColumnIndex("salary")); String phone=cursor.getString(cursor.getColumnIndex("phone")); People people=new People(name,salary,phone); listArray.add(people); } listView= (ListView) findViewById(R.id.list_item); listView.setAdapter(new MyAdapter()); } class MyAdapter extends BaseAdapter { @Override public int getCount() { return listArray.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override //获取一个View对象作为ListView的条目,这个View可以是buton,text,EditText,所有View的子类都可以作为ListView的条目来显示,这样就很华丽了
//getCount()返回的数值即为getView调用的次数,position的值为显示条目的位置,第0个View,position为0,第2个View,position为1;
//position为1... public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(MainActivity.this); People p = listArray.get(position); textView.setText(p.toString()); return textView; } }}
0 0
- ListView详解(ConvertView优化)
- 使用convertView优化ListView
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- ListView的优化和convertView
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- 利用convertView优化ListView性能
- ListView的优化:convertView + viewHolder
- 利用convertView优化ListView性能
- Listview优化之convertView,viewHolder
- delphi 中如何调用sql 存储过程
- 【sql入门】根据要求绘制E/R图,创建数据库(2)mySQL建表基本语法及主键外键选择
- 白话Spring(基础篇)---自动装配
- mac下安装tomcat
- DELPHI如何调用存储过程
- ListView详解(ConvertView优化)
- 2014年第五届蓝桥杯C/C++程序设计本科B组省赛 7六角填数
- HttpClient使用详解
- 浅读讯飞语音云
- Android沉浸式状态栏的细节
- PL/SQL Developer记住用户名密码
- SeaJS简介三:模块载入和引用
- JAVA基本语法
- 【小镇的技术天梯】mysql explain性能分析中的type