文档章节

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
一个老鸟发的公司内部整理的 Android 学习路线图

一个老鸟发的公司内部整理的 Android 学习路线图 jixiaohua发了一篇。另一份 Android 开发学习路线图。可惜不是MarkDown格式的,所以jixiaohua直接上传的截图,在jixiaohua的呼吁下,我花了些...

2eggs
08/22
0
0
如何自定义LinearLayout

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

Kingguary
2012/06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMq异常处理

1.查找指定文件位置 find . -name "*erlang.cookie" 2.Rabbitmq异常 ===========根据提示,应该是Erlang的cookie出现问题 attempted to contact: ['rabbit@DESKTOP-RVK1IHE'] rabbit@DESKTO......

zhaochaochao
25分钟前
2
0
Java虚拟机学习笔记

jconsole的连接 JConsole的远程连接 JConsole远程连接配置(用VisualVM进行远程连接的配置和JConsole是一摸一样滴) JVM之jconsole远程连接配置...

OSC_fly
25分钟前
1
0
区块链教程以太坊源码分析downloader-peer源码分析

  兄弟连区块链教程以太坊源码分析downloader-peer源码分析,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让...

兄弟连区块链入门教程
27分钟前
2
0
ubuntu 自定义记录用户登录以及操作日志

root@ms:~# cd /etc#更改之前先备份,养成良好的习惯,否则肠子都要悔青了root@ms:/etc# cp profile profile.bakroot@ms:/etc# vi profile 在文章末尾加入下列shell脚本 history US...

Marhal
27分钟前
1
0
liunx 下使用rpm进行软件卸载

rpm -qa | grep php 列出所有的php相关的rpm包 rpm -e xxx 删除包

bengozhong
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部