`

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的单击和双击吗?

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

相关推荐

    AndroidListView的三种适配器用法

    详细介绍了ListView比较常用的三种适配器的用法,基于代码一步一步完成,自己学习后的一点总结

    Android控件之ListView用法实例详解

    本文实例讲述了Android控件之ListView用法。分享给大家供大家参考。具体如下: 示例一: 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。 main.xml布局...

    android 常用控件布局汇总

    android 常用控件如:ProgressBar、ActionBar、Switch、ListView 、PopupWindow....等的用法,各种Style的写法以及自定义常用控件 android 五大布局的汇总及用法

    ListView是Android中比较难以使用的控件,布局,适配

    ListView也是Android中比较难以使用的控件,这节内容就将详细解读ListView的用法。 一个ListView通常有两个职责。 (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现...

    android listview

    1 LISTVIEW 加载不同的布局,常用事件的用法 2.Listview 优化 ,重用 , 3.已经测试成功,欢迎使用

    Android程序技术:ListView的介绍.pptx

    Android 程序技术 ...BaseAdapter即基本的适配器,使用BaseAdapter时需要实现四个方法。 public abstract int getCount() //得到Item条目的总数 public abstract Object getItem(int position) //根据posi

    ListView控件

    ListView绝对可以称得上是Android中最常用的控件之一,几乎所有的应用程序都会用 到它。由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程 序中有大量的数据需要展示的时候,就可以借助...

    Android中ListView的几种常见的优化方法总结

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapter类,我们这里都继承自BaseAdapter,...

    Android核心组件 ListView 详解

    在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。 ?? ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要...

    Android ListView之EfficientAdapte的使用详解

    在做Android手机应用开发时, ListView是一个非常常用的控件。如何更新的使用它呢?其实SDK中的例子已经非常的完整了,并且能满足大多数的需要。  如果大家刚开始学习ListView,我建议大家还是直接先看官方的例子好...

    深入浅出学习Android ListView基础

    主要介绍了深入浅出的带领大家学习Android ListView基础,ListView是安卓里常用的控件,本文介绍一下常用用法,以及优化等方法,感兴趣的小伙伴们可以参考一下

    最常用和最难用的Android控件ListView

    1. ListView的简单用法 首先新建一个ListViewTest项目,然后修改activity_main.xml代码. &lt;LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:layout_height=match_parent android:...

    【android】ListView之BaseAdapter使用详解

    android中ListView是一个比较常用的控件,它用于方便的列表显示可见数据,当数据过多时,会出现滚动条,并且可以根据屏幕长度进行自适应显示。 1. 为什么使用BaseAdapter? ListView需要设置数据适配,就是添加你...

    Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)

    ListView控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等….我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox ...

    ListView、Universal ImageView Loader的使用

    ListView基本介绍,开发过程中常用的属性、方法及使用过程中需要注意的问题.Universal ImageView Loader的简单介绍和使用。

    Android开发之ListView、GridView 详解及示例代码

    ListView与GridView是Android开发中的常用控件,它们和Adapter配合使用能够实现很多界面效果。下面分别以实例说明ListView、GridView的用法。  1.ListView的Android开发实例  ListView 是android开发中最常用的...

    工作中经常用到的android开发代码2

    我个人在工作中常用的代码,自己边用...13.android模拟器设置为WVGA800时窗口只占半屏解决方法 14.获取设备屏幕尺寸 15.计算状态栏的高度 16.listView 焦点陷阱 17. 调用第三方程序 18. android listview 异步加载图片

    Android UI组件实例集合

    使用方法:1-把GifView.jar加入你的项目。2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个UI控件。 如: &lt;com.ant.liao.GifView android:id="@+id/gif2" android:layout_...

    Android代码-安卓常用组件

    PropertyValuesHolder-&gt;相对于直接使用ObjectAnimator方法资源更优化 AnimatorSet-&gt;可以按指定的顺序执行动画,而不是同时执行(Animator不可重用) ValueAnimator-&gt;可以完全自定义自己的动画 FloatMenu 说明:...

Global site tag (gtag.js) - Google Analytics