`

玩转Android---UI篇---ListView之SampleAdapter(列表)---1

阅读更多

ListView是列表组件,这个ListView是我接触的目前所有Android UI控件中最为麻烦的控件,之所以麻烦就是因为它的各种的适配器Adapter特别麻烦,Adapter的组织结构图如下



 在ListView中,以内不同的Adapter不同,所以也会有不同的效果,其中比较常用的是SampleAdapter,SimpleCursorAdapter,ArrayAdapter,BaseAdapter等,

万事开头难,还是从最简单的SimpleAdapter说起,以后再一点点学习

 

simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。

 

先看看一个实例,是由SimpleAdapter与ListView绑定后的一个小例子。

ListViewone.java文件

 

package org.hualang.simpleadapter;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class ListViewone extends ListActivity {
    /** Called when the activity is first created. */
	private Toast toast;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayList<HashMap<String,String>> list=new ArrayList<HashMap<String,String>>();
        HashMap<String,String> map1=new HashMap<String,String>();
        HashMap<String,String> map2=new HashMap<String,String>();
        HashMap<String,String> map3=new HashMap<String,String>();
        map1.put("name", "凝墨");
        map1.put("phone", "13699452790");
        map2.put("name", "小棕");
        map2.put("phone", "15827980910");
        map3.put("name", "花郎");
        map3.put("phone", "18678091166");
        
        list.add(map1);
        list.add(map2);
        list.add(map3);
        SimpleAdapter listAdapter=new SimpleAdapter(this,
        		list,
        		R.layout.info,
        		new String[] {"name","phone"},
        		new int[] {R.id.name,R.id.phone});
        setListAdapter(listAdapter);
    }
    protected void onListItemClick(ListView l,View v,int position,long id)
    {
    	super.onListItemClick(l,v,position,id);
    	if(l.getItemIdAtPosition(position)==0)
    	{
    		toast.makeText(getApplicationContext(), "我是凝墨", Toast.LENGTH_SHORT).show();
    	}else if(l.getItemIdAtPosition(position)==1)
    	{
    		toast.makeText(getApplicationContext(), "我是小棕", Toast.LENGTH_SHORT).show();
    	}else if(l.getItemIdAtPosition(position)==2)
    	{
    		toast.makeText(getApplicationContext(), "我是花郎", Toast.LENGTH_SHORT).show();
    	}
    	
    }
    
}

 main.xml文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:id="@+id/linearlayout"
    	android:orientation="vertical"
    >
    	<ListView
    		android:id="@id/android:list"
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:drawSelectorOnTop="false"
    		android:scrollbars="vertical"
    	/>
    </LinearLayout>
</LinearLayout>

 info.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:paddingLeft="10dip"
  android:paddingRight="10dip"
  android:paddingTop="1dip"
  android:paddingBottom="1dip"
  >
  <TextView
  	android:id="@+id/name"
  	android:layout_width="180dip"
  	android:layout_height="30dip"
  	android:textSize="10pt"
  	android:singleLine="true"
  />
  <TextView
  	android:id="@+id/phone"
  	android:layout_width="fill_parent"
  	android:layout_height="fill_parent"
  	android:gravity="right"
  	android:textSize="10pt"
  />
</LinearLayout>

 使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局info.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(info.xml)。布局文件的组件name,phone。布局文件的各组件分别映射到HashMap的各元素上,完成适配。

 

运行结果如下:



 当点击了第一行


 

 

实例2:显示一个带图片的ListView,使用适配器SampleAdapter

ListViewone.java

package org.hualang.simpleadapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;
public class ListViewone extends ListActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.info,
				new String[]{"name","phone","img"},
				new int[]{R.id.name,R.id.phone,R.id.img});
		setListAdapter(adapter);
	}

	private List<Map<String, Object>> getData() {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "凝墨");
		map.put("phone", "13699782346");
		map.put("img", R.drawable.pic1);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "小棕");
		map.put("phone", "15899034671");
		map.put("img", R.drawable.pic2);
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "花郎");
		map.put("phone", "18677656526");
		map.put("img", R.drawable.pic3);
		list.add(map);
		
		return list;
	}
}

 info.xml

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

		<TextView android:id="@+id/name" 
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:textColor="#FFFFFFFF"
			android:textSize="22px" />
		<TextView android:id="@+id/phone" 
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:textColor="#FFFFFFFF"
			android:textSize="13px" />
	</LinearLayout>
</LinearLayout>

 这里,就不做事件处理了,运行结果如下:


  • 大小: 13.8 KB
  • 大小: 11.3 KB
  • 大小: 13.3 KB
  • 大小: 13.6 KB
分享到:
评论

相关推荐

    Android---UI篇

    •Android---UI篇---ListView之SampleAdapter(列表)---1 • •Android---UI篇---ListView之ArrayAdapter(列表)---2 • •Android---UI篇---ListView之SimpleCursorAdapter(列表)---3 • •Android---UI篇---...

    Android应用源码之drag-sort-listview-master.rar

    本篇文章将深入剖析`drag-sort-listview-master`这个源码项目,揭示其工作原理,并提供实用的开发技巧。 首先,我们需要理解Drag-Sort-Listview的核心概念。它主要由两部分组成:拖动(Drag)和排序(Sort)。拖动是指...

    MVC-ListView-DataModel-master.zip

    MVC-ListView-DataModel-master.zipMVC-ListView-DataModel-master.zipMVC-ListView-DataModel-master.zipMVC-ListView-DataModel-master.zipMVC-ListView-DataModel-master.zipMVC-ListView-DataModel-master....

    Android-ListView-Example

    这个"Android-ListView-Example"项目显然旨在教你如何在Android应用中有效地使用ListView。以下是对这个主题的详细说明: 1. **ListView的基本概念**:ListView是一个视图容器,它能够显示一组可滚动的项目列表。每...

    android-world-of-listview-android

    ListView是Android应用程序中常用的一种UI控件,用于显示一系列数据项,如联系人列表、消息列表等。下面将从给定的部分内容中提炼出关于ListView的关键知识点。 ### 虚拟化与适配器 虚拟化是解决大数据集时内存和...

    android--ListView下拉刷新demo

    在Android开发中,ListView是一种常见的组件,用于展示大量的列表数据。`ListView`的下拉刷新功能是提升用户体验的重要特性,特别是在处理动态加载数据的应用场景中。这个“android--ListView下拉刷新demo”就是一个...

    android-pulltorefresh-listview 下拉刷新ListView

    ListView是Android SDK中的一个视图组件,用于展示大量的列表数据。通过适配器(Adapter)将数据源与ListView绑定,可以实现数据的动态加载和滚动显示。然而,ListView默认并不支持下拉刷新功能,这就需要额外的库来...

    android-pulltorefresh-listview

    本篇文章将深入探讨该库的工作原理以及如何在项目中集成和自定义`android-pulltorefresh-listview`。 一、`android-pulltorefresh`库简介 `android-pulltorefresh`库由英国开发者Chris Banes创建,它提供了一个可...

    Android-滑动listview标题置顶listview吸顶效果

    在Android应用开发中,UI设计和用户体验是至关重要的部分,特别是在构建列表视图(ListView)时。本知识点主要探讨如何实现“滑动ListView时标题置顶”和“ListView吸顶效果”,以及如何使安卓系统状态栏透明化。这些...

    Android-react-native-timeline-listview.zip

    Android-react-native-timeline-listview.zip,React本机应用程序的时间线组件,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    Android-ListView中嵌套(ListView)控件兼容问题

    ### Android-ListView中嵌套(ListView)控件兼容问题 #### 背景与问题描述 在Android开发中,有时我们需要在`ListView`中嵌套另一个`ListView`以实现更复杂的用户界面设计。然而,在实际操作过程中可能会遇到一些...

    android-listview列表伸缩自定义组件

    在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。然而,有时我们需要实现更复杂的交互效果,比如点击列表项后展开一个自定义的详细信息面板。这就是所谓的"android-listview列表伸缩自定义组件...

    Android-PullToRefresh-master

    在Android平台上,ListView是一种常用的控件,用于显示大量的列表数据。然而,为了使应用更加生动、交互性更强,开发者通常会引入“拉动刷新”功能,让用户在滚动到列表顶部时能够手动触发新数据的加载。"Android-...

    android-support-v4.jar最新版

    - **Fragment**: 这是Android开发中的重要组成部分,允许在活动中创建可重用的、独立的UI块。在Android 3.0(API级别11)及以上版本中引入,但v4库使其可以在低至Android 1.6(API级别4)的版本上使用。 - **Loader...

    pinned-section-listview-master

    标题 "pinned-section-listview-master" 指的是一款仿照MIUI7文件管理器中“最近”功能的ListView实现,它特别强调了在ListView头部存在可以固定的分类。这个项目可能是一个开源Android开发示例,旨在帮助开发者创建...

    android-support-v7和android-support-v7-recyclerview的classes.jar

    在Android开发中,`android-support-v7`库和`android-support-v7-recyclerview`库是两个非常关键的组件,它们极大地扩展了Android SDK的功能,并帮助开发者实现向后兼容性,以便在不同版本的Android系统上运行应用。...

    android--ListView实现带标题栏效果(附源码)

    在Android开发中,ListView是一种常用的UI组件,常用于展示大量数据列表。本教程将详细介绍如何在ListView中实现带标题栏的效果。标题栏通常用于显示分类信息或者操作按钮,为用户提供更好的交互体验。以下是对实现...

    安卓listview相关相关-Android--ListView返回第一条数据的实现.rar

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。本资源"安卓listview相关相关-Android--ListView返回第一条数据的实现.rar"主要关注如何实现在ListView中快速定位到第一条数据。以下是对...

    Android-ListView 实现点击侧边A-Z快速查找.zip

    android studio开发app项目 Android-ListView 实现点击侧边A-Z快速查找 Android-ListView 实现点击侧边A-Z快速查找 Android-ListView 实现点击侧边A-Z快速查找

    Android实现的ListView-ListViewAdapter(新闻列表事例)

    在这个“Android实现的ListView-ListViewAdapter(新闻列表事例)”中,我们将探讨如何利用ListView和ListViewAdapter来构建一个新闻列表,具体涵盖以下几个关键知识点: 1. **ListView**: ListView是Android SDK中的...

Global site tag (gtag.js) - Google Analytics