android用户界面-组件Widget-列表视图ListView

简介:

ListView是比较常用的控件

程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应。

列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据 具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

 

SimpleAdapter的例子如下:

首先在xml里面定义一个ListView

 

 
  1. 1.<?xml version="1.0" encoding="utf-8"?>    
  2.  2. <LinearLayout      
  3.  3.    android:id="@+id/LinearLayout01"      
  4.  4.    android:layout_width="fill_parent"      
  5.  5.    android:layout_height="fill_parent"      
  6.  6.    xmlns:android="http://schemas.android.com/apk/res/android">    
  7.  7. <ListView android:layout_width="wrap_content"      
  8.  8.          android:layout_height="wrap_content"      
  9.  9.          android:id="@+id/ListView01"    
  10.  10.          />    
  11.  11. </LinearLayout>    
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	android:id="@+id/LinearLayout01" 
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent" 
	xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:id="@+id/ListView01"
          />
</LinearLayout>

 

定义ListView每个条目的Layout,用RelativeLayout实现:

 

 
  1. 1.<?xml version="1.0" encoding="utf-8"?>    
  2.  2.<RelativeLayout      
  3.  3.    android:id="@+id/RelativeLayout01"      
  4.  4.    android:layout_width="fill_parent"      
  5.  5.    xmlns:android="http://schemas.android.com/apk/res/android"      
  6.  6.    android:layout_height="wrap_content"      
  7.  7.    android:paddingBottom="4dip"      
  8.  8.    android:paddingLeft="12dip"    
  9.  9.    android:paddingRight="12dip">    
  10.  10.<ImageView      
  11.  11.    android:paddingTop="12dip"    
  12.  12.    android:layout_alignParentRight="true"    
  13.  13.    android:layout_width="wrap_content"      
  14.  14.    android:layout_height="wrap_content"      
  15.  15.    android:id="@+id/ItemImage"    
  16.  16.    />      
  17.  17.<TextView      
  18.  18.    android:text="TextView01"      
  19.  19.    android:layout_height="wrap_content"      
  20.  20.    android:textSize="20dip"      
  21.  21.    android:layout_width="fill_parent"      
  22.  22.    android:id="@+id/ItemTitle"    
  23.  23.    />    
  24.  24.<TextView      
  25.  25.    android:text="TextView02"      
  26.  26.    android:layout_height="wrap_content"      
  27.  27.    android:layout_width="fill_parent"      
  28.  28.    android:layout_below="@+id/ItemTitle"      
  29.  29.    android:id="@+id/ItemText"    
  30.  30.    />    
  31.  31.</RelativeLayout>    
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
	android:id="@+id/RelativeLayout01" 
	android:layout_width="fill_parent" 
	xmlns:android="http://schemas.android.com/apk/res/android" 
	android:layout_height="wrap_content" 
	android:paddingBottom="4dip" 
	android:paddingLeft="12dip"
	android:paddingRight="12dip">
<ImageView 
	android:paddingTop="12dip"
	android:layout_alignParentRight="true"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:id="@+id/ItemImage"
	/> 
<TextView 
    android:text="TextView01" 
    android:layout_height="wrap_content" 
    android:textSize="20dip" 
    android:layout_width="fill_parent" 
    android:id="@+id/ItemTitle"
    />
<TextView 
	android:text="TextView02" 
	android:layout_height="wrap_content" 
	android:layout_width="fill_parent" 
	android:layout_below="@+id/ItemTitle" 
	android:id="@+id/ItemText"
	/>
</RelativeLayout>

 

最后在Activity里面调用和加入Listener,具体见注释:

 

 
  1. 1.package com.ray.test;     
  2.  2.    
  3.  3.import java.util.ArrayList;     
  4.  4.import java.util.HashMap;     
  5.  5.    
  6.  6.import android.app.Activity;     
  7.  7.import android.os.Bundle;     
  8.  8.import android.view.ContextMenu;     
  9.  9.import android.view.MenuItem;     
  10.  10.import android.view.View;     
  11.  11.import android.view.ContextMenu.ContextMenuInfo;     
  12.  12.import android.view.View.OnCreateContextMenuListener;     
  13.  13.import android.widget.AdapterView;     
  14.  14.import android.widget.ListView;     
  15.  15.import android.widget.SimpleAdapter;     
  16.  16.import android.widget.AdapterView.OnItemClickListener;     
  17.  17.    
  18.  18.public class TestListView extends Activity {     
  19.  19.    @Override    
  20.  20.    public void onCreate(Bundle savedInstanceState) {     
  21.  21.        super.onCreate(savedInstanceState);     
  22.  22.        setContentView(R.layout.main);     
  23.  23.        //绑定Layout里面的ListView     
  24.  24.        ListView list = (ListView) findViewById(R.id.ListView01);     
  25.  25.             
  26.  26.        //生成动态数组,加入数据     
  27.  27.        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();     
  28.  28.        for(int i=0;i<10;i++)     
  29.  29.        {     
  30.  30.            HashMap<String, Object> map = new HashMap<String, Object>();     
  31.  31.            map.put("ItemImage", R.drawable.checked);//图像资源的ID     
  32.  32.            map.put("ItemTitle""Level "+i);     
  33.  33.            map.put("ItemText""Finished in 1 Min 54 Secs, 70 Moves! ");     
  34.  34.            listItem.add(map);     
  35.  35.        }     
  36.  36.        //生成适配器的Item和动态数组对应的元素     
  37.  37.        SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源      
  38.  38.            R.layout.list_items,//ListItem的XML实现     
  39.  39.            //动态数组与ImageItem对应的子项             
  40.  40.            new String[] {"ItemImage","ItemTitle""ItemText"},      
  41.  41.            //ImageItem的XML文件里面的一个ImageView,两个TextView ID     
  42.  42.            new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}     
  43.  43.        );     
  44.  44.            
  45.  45.        //添加并且显示     
  46.  46.        list.setAdapter(listItemAdapter);     
  47.  47.             
  48.  48.        //添加点击     
  49.  49.        list.setOnItemClickListener(new OnItemClickListener() {     
  50.  50.    
  51.  51.            @Override    
  52.  52.            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,     
  53.  53.                    long arg3) {     
  54.  54.                setTitle("点击第"+arg2+"个项目");     
  55.  55.            }     
  56.  56.        });     
  57.  57.             
  58.  58.      //添加长按点击     
  59.  59.        list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {     
  60.  60.                 
  61.  61.            @Override    
  62.  62.            public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {     
  63.  63.                menu.setHeaderTitle("长按菜单-ContextMenu");        
  64.  64.                menu.add(000"弹出长按菜单0");     
  65.  65.                menu.add(010"弹出长按菜单1");        
  66.  66.            }     
  67.  67.        });      
  68.  68.    }     
  69.  69.         
  70.  70.    //长按菜单响应函数     
  71.  71.    @Override    
  72.  72.    public boolean onContextItemSelected(MenuItem item) {     
  73.  73.        setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目");      
  74.  74.        return super.onContextItemSelected(item);     
  75.  75.    }     
  76.  76.}    

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080693
相关文章
|
3月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
4月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
70 1
|
4月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
5月前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
5月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
164 0
|
5月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
5月前
|
Android开发 开发者
安卓应用开发中的自定义视图
【9月更文挑战第37天】在安卓开发的海洋中,自定义视图犹如一座座小岛,等待着勇敢的探索者去发现其独特之处。本文将带领你踏上这段旅程,从浅滩走向深海,逐步揭开自定义视图的神秘面纱。
60 3
|
5月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
100 6
|
6月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
430 5

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 10
    Android实战经验之Kotlin中快速实现MVI架构
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    55
  • 2
    android FragmentManager 删除所有Fragment 重建
    25
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    39
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    40
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    43
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    151
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    50
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    66
  • 9
    Android历史版本与APK文件结构
    169
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54