文档章节

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

yolinfeng
 yolinfeng
发布于 2015/02/16 00:18
字数 828
阅读 34
收藏 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学习-列表视图ListView

一、简介: ListView,列表视图,直接继承了AbsListView,是一个以垂直方式在项目中显示View视图的列表。ListView的数据项,来自一个继承了ListAdapter接口的适配器。 二、新建一个包listvie...

YouChaoMin
2018/11/28
0
0
【压岁干货】精彩技术博客+优秀源码集锦

虽然2015年已经过了一月有余,但在中国,好像只有过了春节才算进入新的一年。眼看着这也春节倒计时了,大家好像又都忙了起来,赶项目赶项目…… 从DevStore整理了一些优秀的技术博客和源码作...

牵着蜗牛去西藏
2015/02/04
1K
4
Android开发学习的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

浮生侃侃
2016/04/19
125
0
给学android的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

星空夜愿
2016/04/16
205
0
Android入门第七篇之ListView (二)

本文来自http://blog.csdn.net/hellogv/ Android入门第六篇之ListView (一) ,讲的是如何制作一个具有两行文本的 自定义控件 ,作为ListView的Item的使用方法。这篇接下来也是围绕ListView和...

晨曦之光
2012/03/14
153
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink TableEnvironment的scan操作

序 本文主要研究一下flink TableEnvironment的scan操作 实例 //Scanning a directly registered tableval tab: Table = tableEnv.scan("tableName")//Scanning a table from a registered......

go4it
27分钟前
2
0
JS检测移动端横竖屏的代码

移动端的设备提供了一个事件:orientationChange事件 这个事件是苹果公司为safari中添加的。以便开发人员能够确定用户何时将设备由横向查看切换为纵向查看模式。 在设备旋转的时候,会触发这...

不负好时光
28分钟前
2
0
ArrayList 优化

优化是 基于数据的大小 当数据量过大 (内存能抗住) 性能达到瓶颈才需要针对性的做优化 contain 优化 可以转换为set add 大批量操作 先预估数据量 调用 `ensureCapacity(int minCapacity)` ...

NotFound403
29分钟前
3
0
Lifecycle Aware Data Loading with Architecture Components

In my previous blog post, I talked about how you can use Loaders to load data in a way that automatically handles configuration changes. With the introduction of Architecture Co......

SuShine
30分钟前
1
0
性能测试汇总

服务器带宽测试 iperf测试带宽 wget -c https://codeload.github.com/esnet/iperf/tar.gz/3.1.6 tar zxvf 3.1.6cd iperf*yum install gcc./configure --prefix=/usr/local/iperf#指定......

以谁为师
34分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部