`

Android ListView常用用法

阅读更多

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。

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

 

 

 

 

首先在xml里面定义一个ListView

 

<?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实现:

 

<?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,具体见注释:

 

package com.ray.test;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class TestListView extends Activity {
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //绑定Layout里面的ListView
        ListView list = (ListView) findViewById(R.id.ListView01);
        
        //生成动态数组,加入数据
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
        for(int i=0;i<10;i++)
        {
        	HashMap<String, Object> map = new HashMap<String, Object>();
        	map.put("ItemImage", R.drawable.checked);//图像资源的ID
        	map.put("ItemTitle", "Level "+i);
        	map.put("ItemText", "Finished in 1 Min 54 Secs, 70 Moves! ");
        	listItem.add(map);
        }
        //生成适配器的Item和动态数组对应的元素
        SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源 
            R.layout.list_items,//ListItem的XML实现
            //动态数组与ImageItem对应的子项        
            new String[] {"ItemImage","ItemTitle", "ItemText"}, 
            //ImageItem的XML文件里面的一个ImageView,两个TextView ID
            new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
        );
       
        //添加并且显示
        list.setAdapter(listItemAdapter);
        
        //添加点击
        list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				setTitle("点击第"+arg2+"个项目");
			}
		});
        
      //添加长按点击
        list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
			
			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
				menu.setHeaderTitle("长按菜单-ContextMenu");   
				menu.add(0, 0, 0, "弹出长按菜单0");
				menu.add(0, 1, 0, "弹出长按菜单1");   
			}
		}); 
    }
	
	//长按菜单响应函数
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目"); 
		return super.onContextItemSelected(item);
	}
}

  

 

分享到:
评论
27 楼 zq2002527 2010-11-30  
yuanyao 写道
raymondlueng 写道
fanth 写道
楼主,有考虑过ListView的单击和双击吗?

单击有考虑过,双击就没有,我所知只有单击和长按动作的哦!

双击动作,重来没考虑到.

有长按就行了
26 楼 anan221 2010-11-24  
我是用listview展开收缩的效果,但是点击第1行的时候,后面第7行也展开,当前手机窗口只显示6条,其他几条要滑动才能显示?这个是什么原因呢?
25 楼 myfriday9 2010-07-27  
allenmoom 写道
wjb_forward 写道
从这个例子可以看出。要在ListView里显示图片。根本不需要自定义Adapter

如果显示的图片不能是资源文件里的图片的时候该怎么办

将Drawable的对象put到map里,就不行

我也用Drawble试过,一直不成功,后来发现其实相当简单
只需要写成这样
map.put("ItemImage", "/sdcard/img/xxxx.png");//图像的路径
24 楼 zyl小星星 2010-07-05  
不错,效果看起来很漂亮!
23 楼 allenmoom 2010-06-11  
wjb_forward 写道
从这个例子可以看出。要在ListView里显示图片。根本不需要自定义Adapter

如果显示的图片不能是资源文件里的图片的时候该怎么办

将Drawable的对象put到map里,就不行
22 楼 wjb_forward 2010-05-31  
从这个例子可以看出。要在ListView里显示图片。根本不需要自定义Adapter
21 楼 fishkey 2010-05-27  
android刚入门.刚好用到.非常感谢
20 楼 gryphone 2010-05-21  
javetu_7 写道
我在考虑,能不能再对话框里使用ListView?

不建议在Dialog里面使用ListView 因为后者显示特性 会导致该Dialog的layout_height会显示所有数据项 而很难看 故推荐用Spinner代替 会美观些[个人看法]
19 楼 gryphone 2010-05-21  
ostrichmyself 写道
有没有折叠的控件? 比如点击一个+号,然后将展开一个控件? 改控件里面可能有EidtText, Button 等等...

ExpandlableListView
18 楼 ostrichmyself 2010-05-17  
有没有折叠的控件? 比如点击一个+号,然后将展开一个控件? 改控件里面可能有EidtText, Button 等等...
17 楼 lifei219317 2010-05-15  
javetu_7 写道
我在考虑,能不能再对话框里使用ListView?

可以在activity中加ListView,然后将activity的theme改为对话框的。
16 楼 javetu_7 2010-05-15  
我在考虑,能不能再对话框里使用ListView?
15 楼 phenom 2010-04-07  
应该添加一些东西.比如我在ListView上面加一个TextView你这样加上去就看不到ListView了.
因为LinearLayout是单独显示行或列的.设置android:orientation="vertical"垂直才可以.
14 楼 wjb_forward 2010-04-07  
这样显示图片也行啊? 以前居然傻到去自己定义Adapter来显示图片,学习了
13 楼 wjb_forward 2010-04-07  
我现在的水平也只看得懂这个,哎,谢谢啦
12 楼 loovle 2010-04-02  
那listview中如何显示嵌入个webview来显示网页内容之后,itemclick事件没有响应,有人遇到过么?
11 楼 sunburst 2010-01-28  
eleda 写道
入门文章,不错!

ListView的数据通常是来自与Internet
而进行联网时为了不影响用户体验,还需要增加一个activity indicator

最好是能有一个Internet aware的adapter,自动加载数据并显示。
再加上delegate的方式,显示activity indicator。

关注这种例子的实现
10 楼 小天狼星 2010-01-05  
yuanyao 写道
raymondlueng 写道
fanth 写道
楼主,有考虑过ListView的单击和双击吗?

单击有考虑过,双击就没有,我所知只有单击和长按动作的哦!

双击动作,重来没考虑到.

恩,好像没有双击事件吧,怎么每次回帖都需要小测验哦??
9 楼 yuanyao 2010-01-05  
raymondlueng 写道
fanth 写道
楼主,有考虑过ListView的单击和双击吗?

单击有考虑过,双击就没有,我所知只有单击和长按动作的哦!

双击动作,重来没考虑到.
8 楼 raymondlueng 2010-01-04  
fanth 写道
楼主,有考虑过ListView的单击和双击吗?

单击有考虑过,双击就没有,我所知只有单击和长按动作的哦!

相关推荐

    android listview常用适配器

    在Android开发中,ListView是一种非常重要的视图组件,它用于展示大量的数据列表。适配器(Adapter)在ListView中扮演着桥梁的角色,将数据源与ListView的视图进行绑定,使得数据可以正确地显示在ListView的各个item...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...

    Android ListView边框圆角美化

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。为了提升用户体验和界面设计的美观性,我们常常需要对ListView进行定制化,包括设置边框和实现圆角效果。本文将深入探讨如何在Android中实现...

    androidlistview里面使用radiobutton

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。而当需要在ListView中实现单选功能时,我们通常会使用RadioButton。本文将深入探讨如何在ListView中集成RadioButton,以及相关的实现...

    Android ListView 下拉刷新、上拉加载

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`下拉刷新`和`上拉加载`功能的实现,极大地提升了用户体验,让用户能够实时获取到最新的数据。本篇文章将深入探讨如何在ListView中实现这两种...

    Android ListView常用小技巧汇总

    本文将详细介绍几个Android ListView的常用小技巧,以帮助开发者更好地理解和优化ListView的使用。 首先,我们来看如何为ListView的每一项(Item)设置分隔线。有两种方法: 1. 直接在布局文件中通过`android:...

    android listview 固定表头,固定前几列

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。然而,当列表项过多时,滚动时表头(Header)会随着滚动消失,给用户查看和理解数据带来不便。为了解决这个问题,开发者通常会实现一个固定...

    android listview 里面使用checkbox

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。当需要在ListView的每一项中加入复选框(Checkbox)时,这通常涉及到自定义Adapter和处理复选状态的逻辑。以下是对这个主题的详细阐述:...

    android listview带有editText

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。然而,当在ListView的每一项中嵌套EditText时,会遇到一些挑战,主要包括EditText的焦点管理问题和数据错位问题。这两个问题在实际应用...

    Android listview嵌套listview

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,有时我们可能需要在一个ListView的项中再嵌套另一个ListView,这被称为ListView的嵌套。这样的设计可以用于展示复杂的数据结构,比如...

    Android ListView分页功能源码

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。由于数据量可能非常大,一次性加载所有数据可能会导致性能问题,甚至使应用崩溃。因此,实现ListView的分页加载功能变得至关重要。分页加载...

    Android listview 逐行显示效果

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。在“Android listview 逐行显示效果”这个主题中,我们将深入探讨如何在ListView中实现逐行动画显示的效果,特别是在Android 1.6版本及eclipse...

    android listview 下拉刷新 动态加载数据 图文混排

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。本教程将重点讲解如何在ListView中实现下拉刷新和动态加载数据的功能,同时处理图文混排的问题。 首先,我们要引入SwipeRefreshLayout库,...

    Android ListView长按删除

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。在许多应用中,我们可能需要添加一些交互性功能,比如长按删除,以增强用户体验。本篇文章将详细...

    android ListView实现树形结构

    在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。然而,要实现一个树形结构,即节点有层级关系的数据展示,就需要进行一些定制化的工作。本篇文章将详细探讨如何在不继承`ListActivity`而是...

    android listView 改变选中行的 字体颜色和 图片

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细...

    Android listview 分组及折叠分组

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。在某些场景下,我们可能需要将数据按照特定的逻辑进行分组,并且允许用户折叠或展开这些分组,以便更好地管理和浏览数据。本篇文章将深入...

    android listview 拖拽效果

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview 拖拽效果"是指在ListView上实现的一项高级功能,允许用户通过手势拖动ListView中的每个条目(item)来改变它们的位置...

    android listview左划删除

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview左划删除"是ListView的一个常见扩展功能,允许用户通过手势左滑列表项来显示一个删除按钮,进而实现快速删除操作。这...

    android listview仿iphone特效

    标题中的“android listview仿iphone特效”指的是在Android开发中,使用ListView组件实现类似iOS界面效果的一种技术。这种效果通常包括但不限于平滑滚动、动态高度调整、渐变背景等,目的是提升Android应用的用户...

Global site tag (gtag.js) - Google Analytics