前面总结了如何应用android自带的布局到ListView中去,现在如果想让自己的ListView更生动,只需要将自己定义的布局应用到ListView中,在布局中添加一些生动的元素,比如,图标。

一、为ListView每个item添加一个图标

先看效果:


首先定义一个entry.xml布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="60dp"android:orientation="horizontal" ><!-- 图标 --><ImageView      android:layout_width="48dp"     android:layout_height="48dp"     android:src="@drawable/preview"     android:layout_gravity="center"     android:layout_marginLeft="10dp"     /><!-- 这里引用android自带的布局simple_list_item_1 --><include      layout="@android:layout/simple_list_item_1"     /></LinearLayout>

然后将此布局文件应用到ListView中去:

public class ListViewDemo extends ListActivity {private List<Map<String,String>> data = new ArrayList<Map<String,String>>();    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        Map<String, String> map1 = new HashMap<String, String>();        map1.put("姓名", "A君");        data.add(map1);        Map<String, String> map2 = new HashMap<String, String>();        map2.put("姓名", "B君");        data.add(map2);        setListAdapter(new SimpleAdapter(this,data,R.layout.entry,        new String[]{"姓名"},        new int[]{android.R.id.text1}        ));    }


二、动态设置图标

以上例子,处理的非常简单,全部图标都一样,现在要想动态设置每个item中元素,需要继承Adapter子类,通过重写getView()函数,为每个item都设置不同的风格。

下面创建BaseAdapter的子类MyAdapter:

private class MyAdapter extends SimpleAdapter{    //icons存储图标的id    private int[] icons = null;        private Context context;public MyAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to,int[] icons) {super(context, data, resource, from, to);// TODO Auto-generated constructor stubthis.icons = icons;//传入存储图标id的数组this.context = context;}/* (non-Javadoc) * 重写getView函数,由于SimpleAdapter能处理TextView,仅仅是不能设置图标 */所以,只需要在调用父类的getView函数的基础上,设置上相应的图标即可@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;if(convertView == null){holder = new ViewHolder();convertView = super.getView(position, convertView, parent);//调用父类的getView函数,设置TextViewholder.imageView = (ImageView)convertView.findViewById(R.id.myimageview);convertView.setTag(holder);}else {holder = (ViewHolder)convertView.getTag();}//从icons中随机选出一个,并设置作为item的图标Random random = new Random();int index = random.nextInt(icons.length);holder.imageView.setImageResource(icons[index]);return convertView;}private class ViewHolder{ImageView imageView;}    }

MyAdapter继承自SimpleAdapter,重写getView()函数,使listView中每个item的图标都是随机选择的。对MyAdapter的应用如下:

//数组存储图标idprivate int[] myicons = { R.drawable.preview,R.drawable.preview1,R.drawable.preview2,R.drawable.preview3};

setListAdapter(new MyAdapter(this, data, R.layout.entry, new String[]{"姓名"},        new int[]{android.R.id.text1}, myicons));//为ListView设置MyAdapter适配器

上图:








更多相关文章

  1. C语言函数的递归(上)
  2. android中添加AT命令流程(转载)
  3. Android(安卓)分辨率与屏幕适配
  4. 一篇文章看明白 Android(安卓)从点击应用图标到界面显示的过程
  5. Android五大布局详解——LinearLayout(线性布局)
  6. Android布局优化总结
  7. Android(安卓)HAL的STUB的具体处理
  8. Android实现自定义带文字和图片的Button
  9. 传智播客Android视频教程——第三天

随机推荐

  1. Android相对布局RelativeLayout详解
  2. Android-FrameLayout(帧布局)
  3. [转]Android DNS 代码分析
  4. Android通过ADB命令获取当前运行的Activi
  5. Windows下NDK开发环境搭建,Eclipse+ADT+CD
  6. android 简单快速 倒计时动画
  7. Android第三方异步网路加载库AsyncHttpCl
  8. Android 网络请求的方式
  9. Android(安卓)监听安装和卸载
  10. Android系统调试wifi总结