main4.xml

<?xml version="1.0" encoding="utf-8"?>    


main4_item.xml

<?xml version="1.0" encoding="utf-8"?>


MainActivity4

package com.example.listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.R.anim;import android.R.drawable;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity4 extends Activity{private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main4);listView=(ListView) findViewById(R.id.listView4_1_1);//一个列表项的内容Map map=new HashMap();map.put("p_w_picpath", R.drawable.ic_launcher);map.put("name", "张三");Map map2=new HashMap();map2.put("p_w_picpath", R.drawable.ic_launcher);map2.put("name", "王五");List> list=new ArrayList>();list.add(map);list.add(map2);SimpleAdapter simpleAdapter=new SimpleAdapter(this, list, R.layout.main4_item, new String [] {"p_w_picpath","name"}, new int [] {R.id.p_w_picpathView4_1_1,R.id.textView4_1_1});listView.setAdapter(simpleAdapter);}}

android的ListView图文混搭_第1张图片



亦可以自定义Adapter

mian5.xml

<?xml version="1.0" encoding="utf-8"?>            

main5_item.xml

<?xml version="1.0" encoding="utf-8"?>

MainActivity5

package com.example.listview;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity5 extends Activity  {private ListView listView;//定义的数据private int [] p_w_picpaths={R.drawable.ic_launcher,R.drawable.ic_launcher};private String [] names={"xiaobai","xiaoming"};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main5);listView=(ListView) findViewById(R.id.listView5_1_1);listView.setAdapter(new MyAdapter());}//自定义适配器class MyAdapter extends BaseAdapter{//获取列表项总数@Overridepublic int getCount() {// TODO Auto-generated method stubreturn names.length;}//获取每一个列表项(根据下标获取)@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn names[position];}//获取每一个列表项的id@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}//@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub//获取布局填充器LayoutInflater layoutInflater=getLayoutInflater();//获取main5_item的布局模板View view=layoutInflater.inflate(R.layout.main5_item, null);//从得到的view查找相应viewImageView p_w_picpathView=(ImageView) view.findViewById(R.id.p_w_picpathView5_1_1);TextView textView=(TextView) view.findViewById(R.id.textView5_1_1);p_w_picpathView.setImageResource(p_w_picpaths[position]);textView.setText(names[position]);return view;}}}

android的ListView图文混搭_第2张图片

android的ListView图文混搭_第3张图片

这种方式会多次调用getView()方法



优化方法

main5.xml

<?xml version="1.0" encoding="utf-8"?>            

ListView设置成 android:layout_height="fill_parent"

//屏幕一次显示7(假设)条记录,则调用7次getView方法,只负责在屏幕中显示的内容的创建,其他的在滑动显示时才创建//因为ListView的高度设置为  android:layout_height="wrap_content"//调用一次getView,绘制一次,增加子组件时会重新绘制(计算高度),所以会多次调用getView()方法//增加一个组件,重新绘制ListView,//每绘制一次ListView,每一个子组件都重新绘制(有几个子组件调用几次)//ListView设置成 android:layout_height="fill_parent"//只输出0,1,2,3,4,5一次System.out.println("position:"+position);

android的ListView图文混搭_第4张图片



将activity中代码修改为:

System.out.print("position:"+position);System.out.println("  "+convertView);//获取布局填充器LayoutInflater layoutInflater=getLayoutInflater();//获取main5_item的布局模板,创建布局对象//如果没有空闲的convertView,创建convertView,否则重复利用convertViewif(convertView==null){convertView=layoutInflater.inflate(R.layout.main5_item, null);}

convertView的使用,主要优化加载布局问题 

android的ListView图文混搭_第5张图片


增加优化二:内部类ViewHolder的使用。

主要优化getView方法中每次回调用findviewByID()方法来获取一次控件的代码。

新增加内部类ViewHolder,用于对控件的实力存储进行缓存。

package com.example.listview;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity5 extends Activity  {private ListView listView;//定义的数据private int [] p_w_picpaths={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};private String [] names={"xiaobai","xiaoming","xiaobai","xiaoming","xiaobai","xiaoming","xiaobai","xiaoming","xiaobai","xiaoming","xiaobai","xiaoming"};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main5);listView=(ListView) findViewById(R.id.listView5_1_1);listView.setAdapter(new MyAdapter());}//自定义适配器//ListView的优化://1.重复使用convertView对象//2.使用viewHolder提高在容器中查找组件的效率class MyAdapter extends BaseAdapter{//获取列表项总数@Overridepublic int getCount() {// TODO Auto-generated method stubreturn names.length;}//获取每一个列表项(根据下标获取)@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn names[position];}//获取每一个列表项的id@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}//@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub//屏幕一次显示7(假设)条记录,则调用7次getView方法,只负责在屏幕中显示的内容的创建,其他的在滑动显示时才创建//因为ListView的高度设置为  android:layout_height="wrap_content"//调用一次getView,绘制一次,增加子组件时会重新绘制(计算高度),所以会多次调用getView()方法//增加一个组件,重新绘制ListView,//每绘制一次ListView,每一个子组件都重新绘制(有几个子组件调用几次)//ListView设置成 android:layout_height="fill_parent"//只输出0,1,2,3,4,5一次System.out.print("position:"+position);System.out.println("  "+convertView);//获取布局填充器LayoutInflater layoutInflater=getLayoutInflater();//获取main5_item的布局模板,创建布局对象//如果没有空闲的convertView,创建convertView,否则重复利用convertViewViewHolder viewHolder;if(convertView==null){convertView=layoutInflater.inflate(R.layout.main5_item, null);viewHolder=new ViewHolder();viewHolder.p_w_picpathView=(ImageView) convertView.findViewById(R.id.p_w_picpathView5_1_1);viewHolder.textView=(TextView) convertView.findViewById(R.id.textView5_1_1);convertView.setTag(viewHolder);}else {viewHolder=(ViewHolder) convertView.getTag();}//View convertView=layoutInflater.inflate(R.layout.main5_item, null);//从得到的view查找相应view/*ImageView p_w_picpathView=(ImageView) convertView.findViewById(R.id.p_w_picpathView5_1_1);TextView textView=(TextView) convertView.findViewById(R.id.textView5_1_1);p_w_picpathView.setImageResource(p_w_picpaths[position]);textView.setText(names[position]);*/viewHolder.p_w_picpathView.setImageResource(p_w_picpaths[position]);viewHolder.textView.setText(names[position]);return convertView;}}class ViewHolder{ImageView p_w_picpathView;TextView textView;}}


更多相关文章

  1. android 相对定位布局方向详解
  2. Android的四大组件
  3. android 布局详解
  4. android设置Activity背景色为透明的2种方法
  5. Android中的五大布局
  6. android之layout布局和ListView中的一些属性介绍
  7. 我的Android进阶之旅------>Android 众多的布局属性详解

随机推荐

  1. go-micro+php+consul实现简单的微服务
  2. php利用session进行登录验证
  3. php实现生成不重复的唯一标识符
  4. 利用会话控制实现页面登录与注销功能
  5. 38条技巧优化PHP代码(总结)
  6. php实现抓取不带后缀的图片
  7. PHP限制访问ip白名单的方法详解
  8. phper优化MySQL千万级大表的方法详解
  9. php匿名函数的使用
  10. 必看!TP6验证码验证失败的原因及解决方法