文档章节

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

yolinfeng
 yolinfeng
发布于 2015/02/16 00:18
字数 828
阅读 31
收藏 0

上篇利用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);
    }

}



本文转载自:http://blog.csdn.net/wulianghuan/article/details/8596057

共有 人打赏支持
yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
Android自定义View的实现(四)

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。 一、自绘控件 自绘...

JayPark不作死
2014/07/02
0
0
Android必备:Android UI控件的了解与学习

看这里:Android必备:Android UI控件的了解与学习 由于工作需要,最近一段时间,需要进行Android App开发的学习,之前简单的进行过Android的了解,对于基本的Android环境的搭建等已经有过整...

Realfighter
2015/02/26
0
0
view-ListView学习

LiastView网上有很多,推荐如下: 1、android ListView详解: http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 2、Android中ListView的性能问题 http://android.tgbus.com/A......

工作日
2011/12/27
0
0
如何自定义LinearLayout

最近通过看别人代码和网上搜索,发现现在自定义LinearLayout的方式有两种。第一种是在扩展的LinearLayout构造函数中使用Inflater加载一个布局,并从中提取出相关的UI组件进行封装,形成一个独...

Kingguary
2012/06/25
0
0
Android学习进阶路线导航线路(Android源码分享)

前言:公司最近来了很多应届实习生,看着他们充满信心但略带稚气的脸庞上,想到了去年的自己,那是的我是不是也和 现在的他们一样呢?现在的我又改变了什么?公司的给这些实习生指定的相关培...

程序袁_绪龙
2014/10/22
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
8分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
10分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
12分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
13分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
16分钟前
365
9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部