- 浏览: 977587 次
- 性别:
- 来自: 深圳
博客专栏
-
飞雪的Android学习总...
浏览量:146048
文章分类
最新评论
-
lovebingheji:
感谢,看完了
Spring方法注入 -
ruijin5566:
package concurrent;
import ja ...
淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和 -
helonghui:
Nginx在高并发的时候,内存开销比Apache更加有优势!
使用Nginx搭建PHP服务器 -
xjgpeople:
不错,写的非常不错
基于Android的浮动组件,可以用于应用中的新功能展示等等。 -
Bj_junxia:
不允许加入了,呜呜呜。。。。
Android系列教程之五:Activity的生命周期
Android系列教程目录:
-
Android教程之一:Window下搭建Android开发环境
-
Android教程之二:Linux下搭建Android开发环境
-
Android教程之三:第一个Android应用,HelloWorld
-
Android系列教程之四:Android项目的目录结构
-
Android系列教程之五:Activity的生命周期
-
Android系列教程之六:TextView小组件的使用--附带超链接和跑马灯效果
-
Android系列教程之七:EditText使用详解-包含很多教程上看不到的功能演示
本文版权归飞雪无情 所有,转载请注明出处, 永久链接: http://flysnow.iteye.com/blog/865944
我新建了一个Android的技术交流群,群号为86686524 120059404 ,感兴趣的可以申请加入,大家一块学习。
一、 不使用 xml 布局文件创建一个 ListView
- 创建一个名称为 HelloListView 的 Android 工程,可以参见 Android教程之三:第一个Android应用,HelloWorld 。
- 要使用 ListView ,需要让你的 Activity 继承于 ListActivity ,这个和以前的有区别,以前的都是继承 Activity ,该 ListActivity 继承 Activity ,扩展了很多常用的用于操作 ListView 的方法,使用很方便。
-
现修改
HelloListView
类如下
:
public class HelloListView extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); //设置一个Adapter setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES)); } //数据数据 private static final String[] COUNTRIES=new String[]{"中国","俄罗斯","英国","法国"}; }
-
运行程序效果如下:
看到了吧,我们的数据已经通过列表的形式显示了出来!!!这里主要的是使用了一个 Adapter— 适配器,你可以把他看成是 ListView 的数据源, ListView 要展示的数据都是已 Adapter 的形势传递给 ListView 的。这个 Adapter 很重要, Android 的用于传给集合控件( ListView,Spinner,GridView 等)的数据都是以 Adapter 的形势,这样的好处就是只要掌握了 Adapter ,就可以很随意的给这些集合控制传递数据,因为他们使用的都是 Adapter 。适配器适配器关键就是适配,只需公布一个 Adapter ,就全搞定了。 Android 已经给我们实现了一些常用的适配器,如刚刚使用的数组适配器,还有简单适配器等 , 如果这些不能满足,我们还可以通过自定义适配器来实现自己的适配器。其实一种适配器就对应了一个集合控件中的一个元素的布局展示。
二: 使用 xml 来自定义 ListView
- 上个例子我们并没有使用在 main.xml 中定义一个 ListView 的形势来布局 ListView ,而是使用的 ListActivity 中默认的 ListView 来演示的。
- 下面就使用我们在 main.xml 中自定义的 ListView, 这样我们可以很方便的控制 ListView 展示的布局,大小,背景色等属性。当然上个例子中我们一样可以通过 getListView 获取 ListView 后使用它的方法来改变布局、大小和背景色等。
-
修改
main.xml
为:
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF0000FF" > </ListView>
这里要注意的是我们设置 ListView 的 id 为 ”@android:id/list”, 意思是我们引用 Android 已经为我们定义好的一个 id ,名字是 list ,如果你不定义成这样,这个 ListView 是不能被 ListActivity 识别的。然后就是添加了一个蓝色的背景,看看我们这个自定义的 ListView 是否起了作用。 -
修改
HelloListView
类为:
public class HelloListView extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //设置一个Adapter setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES)); } //数据数据 private static final String[] COUNTRIES=new String[]{"中国","俄罗斯","英国","法国"}; }
比上个例子只是多了 setContentView(R.layout. main ); 是为了让 Android 识别我们定义的 ListView 。 -
运行效果图:
背景已经变成了蓝色,说明我们在xml中定义的ListView起作用了。
三: 自定义要展示的元素
- 前面的两个例子都是展示一行文字,如果我们想图文混排怎么做呢,比如前面是文字,后面是图片。要实现这种功能就需要我们自定义 Adapter 啦。
-
新建布局文件
item.xml,
内容如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/text" android:layout_alignParentLeft="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/image" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout>
这里主要定义一个 TextView 和一个 ImageView ,用于显示列表每一行的文本和图片
-
修改
HelloListView
类如下:
public class HelloListView extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //设置一个Adapter,使用自定义的Adapter setListAdapter(new TextImageAdapter(this)); } /** * 自定义视图 * @author 飞雪无情 * */ private class TextImageAdapter extends BaseAdapter{ private Context mContext; public TextImageAdapter(Context context) { this.mContext=context; } /** * 元素的个数 */ public int getCount() { return texts.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } //用以生成在ListView中展示的一个个元素View public View getView(int position, View convertView, ViewGroup parent) { //优化ListView if(convertView==null){ convertView=LayoutInflater.from(mContext).inflate(R.layout.item, null); ItemViewCache viewCache=new ItemViewCache(); viewCache.mTextView=(TextView)convertView.findViewById(R.id.text); viewCache.mImageView=(ImageView)convertView.findViewById(R.id.image); convertView.setTag(viewCache); } ItemViewCache cache=(ItemViewCache)convertView.getTag(); //设置文本和图片,然后返回这个View,用于ListView的Item的展示 cache.mTextView.setText(texts[position]); cache.mImageView.setImageResource(images[position]); return convertView; } } //元素的缓冲类,用于优化ListView private static class ItemViewCache{ public TextView mTextView; public ImageView mImageView; } //展示的文字 private String[] texts=new String[]{"天气","我团","背景"}; //展示的图片 private int[] images=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3}; }
这里的主要地方是自定义了一个 Adapter ,我们只需要继承 BaseAdapter 即可, BaseAdapter 已经实现了 Adapter 的大部分方法,我们继承后只需要实现部分的方法即可。必须实现的就是 getCount 和 getView 方法,前一个是返回 ListView 中有多少个元素,后一个是生成要展示的 View 。 ListView 在每添加一个 View 是就会调用 Adapter 的 getView 方法,所以我们有必要对这个方法做优化,例子中就做了部分的优化,一般面试的时候会被问到 ListView 优化,回答例子中的这些代码就差不多了。 -
运行,我们会看到效果如图:
四、ListView 列表中的元素的单击事件响应
-
如果我们要想单击一个 ListView 的元素使其作出相应的响应怎么办呢?比如弹出什么,打开什么,展示什么等等,那么我们只需要实现单击事件的函数既可。
-
要实现 ListView 的单击事件有两种方法,一个是使用 getListView().setOnClickListener(l ); 设置,这个和平时我们用的控件设置是一样的,不做介绍,下面介绍第二个,就是重写 ListActivity 的 onListItemClick 方法,其实这个的最后处理也是 ListView 的 setOnClickListener 进行监听调用的。
-
在 HelloListView 类中增加如下代码:
@Override protected void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(this, "你单击了"+texts[position], Toast.LENGTH_SHORT).show();
-
运行单击其中的一行效果如下图:
五、小结
到这里ListView应该算是会使用了,起码常用的功能会的,当然还有很多没有说到的,比如ListView的分割部分,headView和footView以及ListView的分页等等,这些就需要我们自己下去好好摸索了。
评论
是第三步:三: 自定义要展示的元素
因为我是在我自己的程序中,有一个主activity,然后通过titlebar进入了我的一个fragment,接下来我是想在fragment里面显示这个列表,第一步骤和第二步骤已经成功,但是用到第三部的时候,系统提示“Content has view with id attribute 'android.r.id.list' that is not a ListView Class.”
因为在 “三: 自定义要展示的元素”中,是自定义的,你的例子中就没有加listview,我想请问,现在要如何处理呢?
谢谢你!
顶
谢谢支持
顶
谢谢支持
顶
发表评论
-
android新建大分辨率模拟器不能启动的问题
2015-03-08 17:36 0新建的Android模拟器的分辨率超过一定大小的时候,就无法启 ... -
android覆盖式引导
2015-03-08 17:35 0我们在开发产品的时 ... -
Android产品开发中常用的一些开源项目
2015-03-08 17:27 2220你在工作中可能会遇到同时给你说不要重复发明轮子,其实这个说的 ... -
Android HttpClient Session保持
2015-03-08 17:20 14541现在单机版本的App已经 ... -
java.lang.UnsupportedOperationException android.view.GLES20Canvas.clipPath
2015-03-08 17:18 2106今天自定义控件使用Canvas绘图的时候遇到的这个错误,看错 ... -
解决Android SDK Manager不能更新的问题
2015-03-08 17:16 3225今天打算更新到Android4.3,看看里面的新的API,D ... -
PenddingIntent.getActivity
2013-03-11 16:40 0PenddingIntent.getActivity -
关于Android的Holo主题
2013-02-22 23:47 8144Android曾经为了优化用户体验,把原生的 ... -
Android Layout布局文件里的android:layout_height等属性为什么会不起作用?
2013-01-29 00:19 20579有的时候,我们配置好的布局文件,在加载完成添加到我们 ... -
震动反馈
2013-01-10 20:58 0震动反馈 -
Android ViewGroup.setDescendantFocusability函数
2013-01-05 12:15 22456这个函数是在ViewGroup里定义的,主要用于控制child ... -
Android设计应用图标不用愁---Asset Studio Integration来帮你
2011-11-12 00:18 8201Android Asset StudioWeb版是 ... -
最新最全的Android4.0 API源代码下载和完整Android4.0源代码下载教程
2011-11-15 09:41 2311这时刚刚整理好的最新的,包含所有的API的源代码,第一次上传的 ... -
基于Android的浮动组件,可以用于应用中的新功能展示等等。
2011-12-10 17:12 4697前言 在开发Android应用时,加新功能是必不可少 ... -
提取出的最新Android4.0 API 源代码
2011-11-15 14:06 4050提取出的Android4.0 API 的源代码,也就是andr ... -
Android中我为什么发不了邮件--Android邮件发送详解
2011-07-19 22:50 15665版权所有@飞雪无情,转载请著名出处:http:/ ... -
Android Developer和Google Group可以正常访问了
2011-06-21 08:56 2393Android Developer和Google Group可 ... -
Android中关于线程使用的几点注意事项
2011-05-21 22:43 8725版权所有:飞雪无情 ... -
Android系列教程之十二:Intents and Intent Filters(三)
2011-03-29 10:02 12948接上节继续。。版权所有:飞雪无情,转载请注明出处: ... -
android.resource://这个Uri你知道吗
2011-03-28 11:22 10268转自:http://www.android123.com.cn ...
相关推荐
这篇“无废话Android系列教程36 -2”着重讲解了ListView的工作原理和使用方法,以及如何进行测试。以下是关于ListView的详细知识: 1. **ListView基本结构**: ListView由多个ListView项(ListView Item)组成,每...
在“无废话Android系列教程36-1”中,我们将深入探讨ListView的工作原理,并通过实际的代码测试来加深理解。这篇教程旨在帮助开发者们更高效地使用和优化ListView,提高应用性能。 ListView的核心机制是视图复用...
本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要了解`PopupWindow`的基本概念。 `PopupWindow`是Android SDK提供的一种轻量级弹窗,它可以在任意位置显示,并且可以...
ListView是Android SDK中的一个视图组件,用于显示一系列可滚动的项目。每个项目可以自定义为不同的视图,比如文本、图片或者它们的组合。ListView通过适配器(Adapter)来获取数据源,并将这些数据转化为可显示的...
本教程通过一个名为"ListApp"的示例项目,详细介绍了如何在Android中使用ListView来构建用户界面并实现基本的功能。 一、ListView基础 ListView是Android SDK中的一种视图容器,用于显示一系列可滚动的行项。它可以...
在Android开发中,ListView是应用最广泛的视图组件之一,尤其在展示大量数据时,它以列表形式高效地展示信息。本教程将深入探讨ListView的单击事件处理,以及如何在实际项目中实现这一功能。 首先,理解ListView的...
本教程将探讨如何在Android中自定义一个美观的Dialog,并在其内部嵌入一个ListView,以便展示更多信息。这个自定义Dialog可以用于显示一系列可选项目,用户可以通过点击ListView中的条目来进行交互。 首先,我们...
在Android应用开发中,ListView是显示大量数据时非常重要的组件,尤其在手机界面设计中,由于屏幕尺寸有限,ListView能够有效地展示信息并提供良好的用户体验。本篇内容将深入讲解ListView及其核心概念Adapter。 ...
标题“ListviewDemo”指的是一个Android...总之,“ListviewDemo”是一个涵盖了Android开发中ListView组件使用的教学资源,通过一系列的实例,帮助开发者深入理解和应用ListView,从而提升他们的Android应用开发技能。
ListView是Android SDK提供的一种视图组件,它允许用户滚动查看一系列项。每个项通常由一个布局文件定义,称为列表项视图。ListView通过适配器(Adapter)来绑定数据源,适配器将数据转化为可显示的视图。 1. **...
Android Training是Google提供的一系列教程,旨在帮助开发者提升Android开发技能。这篇文章是Android Training的一部分,专门讲解了如何结合Navigation和ListView实现高效的用户导航。 4. **源码分析** 文章提供...
在Xamarin.Android开发中,ListView控件是一种常用的数据展示组件,它可以用来显示一系列可滚动的项目,非常适合于数据显示。本教程将深入探讨如何利用ListView结合Web API来动态获取并展示数据。 首先,我们需要...
在Android应用开发中,UI(用户界面)组件是构建应用程序不可或缺的部分。这些组件构成了用户与应用交互的视觉元素。以下是对“android ui组件大全”这个主题的详细解析: 标题:“android ui组件大全” 这个标题...
每个Android应用都由一系列组件构成,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。活动是用户与应用交互的主要入口,服务在后台运行,广播接收器...
总之,ListView是Android开发中的基石之一,理解并熟练掌握其使用方法对构建高效的数据展示界面至关重要。通过阅读和实践ListViewTest项目中的代码,你将进一步加深对ListView和Adapter机制的理解。
本教程将深入探讨如何使用SimpleAdapter和自定义Adapter与ListView协同工作,以实现数据的动态展示。以下是对相关知识点的详细说明: 1. **ListView**: ListView是Android中的一个视图容器,可以显示一系列可滚动的...
1. ListView:ListView是Android中的一个视图组件,它能够滚动显示一系列视图项。通过Adapter(适配器)将数据绑定到ListView上,实现动态加载和显示。 2. CheckBox:CheckBox是Android的开关型组件,用户可以选择...
在Android开发中,ListView的使用是非常基础且重要的技能。本教程将详细讲解ListView的实现,包括基本结构、适配器、数据绑定以及优化策略。 首先,ListView的基本结构主要包括两部分:ListView本身和适配器...
本教程将深入探讨以下Android组件:网格视图、图像切换、列表视图、单选按钮组、进度条、画廊、日期选择器以及复选框,并通过实例来帮助你更好地理解和应用这些组件。 1. **网格视图(GridView)** 网格视图是一种...