Android之UI学习篇十二:ListView控件学习(二)

上篇利用LIstView实现了一个简单的例子,这篇以一个更贴近项目的例子来分享一下ListView的使用方法,模拟疼痛的微信客户端list界面.

先看看实现效果:



工程结构目录:



这个案例中使用自定义的item.xml布局文件,在Activity中使用simpleAdapter和它的setViewBinder()方法来配置和绑定数据。

以下是源代码:

首先看一下布局文件

main.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="fill_parent"
    android:orientation="vertical" >

   <ListView
       android:paddingTop="10dip"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/MyListView"/>

</LinearLayout>

item.xml (采用线性布局,利用weight权重属性控制显示比例)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyListItem"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingTop="5dip"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/ItemPic"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="left" 
        android:layout_weight="5">
        <ImageView 
            android:id="@+id/image"
            android:layout_width="wrap_content"
        	android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:layout_weight="1">

            <TextView
                android:id="@+id/name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="15dip"
                android:textColor="@android:color/white"
                android:layout_weight="1"/>
            <TextView
                android:id="@+id/time"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="12dip"
                android:textColor="@android:color/tertiary_text_light"
                android:layout_weight="3"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:layout_weight="1">
            <TextView
                android:id="@+id/content"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="@android:color/tertiary_text_light"
                android:textSize="12dip" >
            </TextView>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>



MyData.java (放置模拟数据)

package com.test.activity;

public class MyData {
	//头像数组
	public static int[] images = new int[]{
			R.drawable.pic001,R.drawable.pic002,R.drawable.pic003,R.drawable.pic004,
			R.drawable.pic005,R.drawable.pic006,R.drawable.pic007,R.drawable.pic008,
			R.drawable.pic009,R.drawable.pic010,R.drawable.pic011,R.drawable.pic012,
			R.drawable.pic013,R.drawable.pic014,R.drawable.pic015,R.drawable.pic016
	};
	//昵称数组
	public static String[] names = new String[]{
		"爱~未字","心海贝因","初音未来","麻子","英子","飞来耶老师","萌海连上","lovvww",
		"love story","功夫只","海盗","玩那个","青蛙昂子","暮烟","孩子们","钢琴师"
	};
	//时间数组
	public static String[] times = new String[]{
		"凌晨00:23","19:00","19:04","昨天14:20","下午15:56","中午12:43","周一 晚上","周一 晚上",
		"昨天10:23","周四 19:00","周五19:04","昨天14:20","凌晨01:56","中午11:43","周一 早上","周四中午"
	};
	
	//会话数组
	public static String[] contents = new String[]{
		"我喜欢你!","晚上好在,在忙什么呢?","不可以,我会所了","这是一场永不不停息的战争","嗯,行!","OK的啦","加油告白","开心快乐",
		"新年快乐!恭喜发财","恭喜发财!快拿红包来","命运的签或者改变不了","不能说的秘密","I Gusss","Say it right","NONNO","周周年"
	};
}


MainActivity.java (重头戏)

package com.test.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.test.activity.*;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;

public class MainActivity extends Activity {
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView listView = (ListView)findViewById(R.id.MyListView);
        System.out.println(listView);
        Log.i("MainActivity", "111");
        //生成适配器,数组
        ArrayList<HashMap<String,Object>> dataList = new ArrayList<HashMap<String,Object>>();
        for(int i=0;i<16;i++)  
        {  
            HashMap<String, Object> map = new HashMap<String, Object>();  
            Resources res=getResources(); 
            //将Drawable图片资源转化为Bitmap对象
            Bitmap bmp=BitmapFactory.decodeResource(res, MyData.images[i]); 
            map.put("image", bmp);  
            map.put("name", MyData.names[i]);  
            map.put("time", MyData.times[i]);
            map.put("content", MyData.contents[i]);  
            dataList.add(map);  
        }  
        //生成适配器,数组
        SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, dataList, R.layout.item,
        		new String[]{"image","name","time","content"}, new int[]{R.id.image,R.id.name,R.id.time,R.id.content});
        
        //绑定数据到listView
        simpleAdapter.setViewBinder(new ViewBinder() {   
        	public boolean setViewValue(View view, Object data,   
        	String textRepresentation) {   
        	//判断是否为我们要处理的对象   
        	if(view instanceof ImageView && data instanceof Bitmap){   
        	ImageView iv = (ImageView) view;   
        	iv.setImageBitmap((Bitmap) data);   
        	return true;   
        	}else   
        	return false;   
        	}   
        	});   
        
        listView.setAdapter(simpleAdapter);
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值