- 浏览: 314942 次
- 性别:
- 来自: 益阳
文章分类
最新评论
-
duckbit:
楼主是否能把共享layout的例子发给我,有点没明白 谢谢额! ...
Android换肤apk -
天涯海角262253:
...
Androidpn里的Xmpp的理解 -
lbstudy:
Activity之间的切换动画 -
dumbnesslys:
楼主可不可以给个源码 ,就build.xml的 772774 ...
Ant自动打包 -
finaljava:
build.xml 这么复杂,看看这个吧http://angr ...
Ant自动打包
public class ListActivity extends Activity java.lang.Object android.content.Context android.content.ContextWrapper android.view.ContextThemeWrapper android.app.Activity android.app.ListActivity
Class Overview
ListActivity显示一个绑定到数组或游标这些数据源的一个列表,并且列表的每一项提供一个点击事件的管理方法,当用户点击其中的列表项的时候就能进行相应的处理。
ListActivity容纳了一个ListView对象,这个对象能够绑定不同的数据源,一般是一个数组或者存储了一组查询结果的游标(Cursor)。
屏幕布局
ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。但是,如果你不想使用默认的布局,可以在onCreate()方法中通过setContentView()方法设定你自己定制的布局。
如果指定你自己定制的布局,你的布局中必须包含一个id为"@android:id/list"的ListView 。此外,你自定义的view为空时,能够包含另外一个任何类型的view对象。
没有数据(empty list)时,会显示一个TextView中的数据,而ListView视图就会被隐藏,但这个TextView的id必须="android:empty"。
下面的代码示例一个丑陋的自定义屏幕布局。这个布局有一个list,这个list有绿色的背景色,还有一个用来代替的红色的“no data”消息。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp"> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00FF00" android:layout_weight="1" android:drawSelectorOnTop="false"/> <TextView id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="No data"/> </LinearLayout>
总结:使用ListActivity的目的就是让其帮我管理ListView等等,所以即使是用我们自己的layout时,其名称也要用@id/android:list,@id/android:empty来命名,这样就可以交给ListActivity来管理。
行布局(Row Layout)
你能够指定列表中一个单独的行的布局。只要在ListAdapter对象中指定一个布局资源就可以了。ListAdapter绑定数据到ListView。
一个ListAdapter构造函数有一个参数来指定每一行的布局资源。此外,它还有另外两个参数来指定哪一个数据域与行布局资源中的对象相关联。这两个参数一般是平行数组。
Android 提供了一些标准的布局资源。这些都在R.layout类中,名字诸如simple_list_item_1, simple_list_item_2, 和two_line_list_item. 下面的布局XML是two_line_list_item, 对于每一行,它分两行来表示数据,一个在上一个在下。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/text1" android:textSize="16sp" android:textStyle="bold" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/text2" android:textSize="16sp" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
你必须确定绑定到这个布局的每一个TextView对象的数据。下一节就做这一方面的介绍。
绑定数据
绑定ListActivity的ListView对象和数据,要使用一个实现了ListAdapter接口的类。Android提供了两个标准的list adapters:绑定静态数据(Maps)的SimpleAdapter,和绑定Cursor的SimpleCursorAdapter。
下面这个例子实例一个自定义的ListActivity,它查询Contacts provider的所有contacts,然后绑定Name和Company两个域到ListActivity的ListView中的分为两行的一个列表项。
public class MyListAdapter extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // We'll define a custom screen layout here (the one shown above), but // typically, you could just use the standard ListActivity layout. setContentView(R.layout.custom_list_activity_view); // Query for all people contacts using the Contacts.People convenience class. // Put a managed wrapper around the retrieved cursor so we don't have to worry about // requerying or closing it as the activity changes state. mCursor = this.getContentResolver().query(People.CONTENT_URI, null, null, null, null); startManagingCursor(mCursor); // Now create a new list adapter bound to the cursor. // SimpleListAdapter is designed for binding to a Cursor. ListAdapter adapter = new SimpleCursorAdapter( this, // Context. android.R.layout.two_line_list_item, // Specify the row template to use (here, two columns bound to the two retrieved cursor rows). mCursor, // Pass in the cursor to bind to. new String[] {People.NAME, People.COMPANY}, // Array of cursor columns to bind to. new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns. // Bind to our new adapter. setListAdapter(adapter); } }
还有一种绑定数据的方法
CursorAdapter有两个子类SimpleCursorAdapter,ResourceCursorAdapter(抽象类)。在CursorAdapter中有两个方法:newView()和bindView()方法,newView方法用来new一个RowLayout,bindView方法用来向这个新的RowLayout绑定数据。有人会说,这不是太麻烦了吗,有这个必要吗?当然有必要啊,因为有些数据不能用SimpleCursorAdapter来进行绑定的。
private final class ContactListItemAdapter extends ResourceCursorAdapter { public ContactListItemAdapter(Context context, int layout, Cursor c) { super(context, layout, c); } @Override public void bindView(View view, Context context, Cursor cursor) { final ContactListItemCache cache = (ContactListItemCache) view.getTag(); TextView nameView = cache.nameView; QuickContactBadge photoView = cache.photoView; cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer); int size = cache.nameBuffer.sizeCopied; nameView.setText(cache.nameBuffer.data, 0, size); final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX); final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY); photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey)); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = super.newView(context, cursor, parent); ContactListItemCache cache = new ContactListItemCache(); cache.nameView = (TextView) view.findViewById(R.id.name); cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge); view.setTag(cache); return view; } }
注意点
其中的view.setTag()方法的主要作用是将数据保存到view对象中,这样从另外一个方法或另一个线程中,就可以得到其中的数据,这比用全局变量要好很多,可以访止多线程的情况下,数据的并发访问。
评论
1 楼
xiaojian623
2011-08-26
楼主你好,请问你一个问题。
你在上面提到:
使用ListActivity的目的就是让其帮我管理ListView等等,所以即使是用我们自己的layout时,其名称也要用@id/android:list,@id/android:empty来命名,这样就可以交给ListActivity来管理。
部分代码为:<TextView id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="No data"/>
上面这段代码中的id定义必须是不带“android:”的吗?
我在代码中写android:id= xxx 回报错啊?
为什么呢?也是交给ListActivity来管理吗?谢谢你!
你在上面提到:
使用ListActivity的目的就是让其帮我管理ListView等等,所以即使是用我们自己的layout时,其名称也要用@id/android:list,@id/android:empty来命名,这样就可以交给ListActivity来管理。
部分代码为:<TextView id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="No data"/>
上面这段代码中的id定义必须是不带“android:”的吗?
我在代码中写android:id= xxx 回报错啊?
为什么呢?也是交给ListActivity来管理吗?谢谢你!
发表评论
-
浅析QQGame
2012-03-01 14:31 3529通过分析QQGame的项目,发现其存在两种方式: 1. 不安 ... -
opengl初探
2012-02-22 10:15 0android里的surfaceview Surfac ... -
onSaveInstanceState(Bundle outState)的调用时机
2012-02-15 11:10 3150Activity的方法onSaveInstanceState( ... -
Activity之间的切换动画
2012-02-15 10:53 22928从android系统2.1以后,android新增了方法:ov ... -
FLAG_ACTIVITY_NEW_TASK和affinity亲和力
2012-02-06 14:07 3616一直以为在intent里加了FLAG_ACTIVITY_N ... -
什么时候调用Dialog的dismiss()方法
2012-02-03 16:27 10068调用Dialog的dismiss()方法的方式: 1. 重写 ... -
引用主题属性
2011-12-28 18:09 2129文档里写的引用主题属性的方法如下: ?[<pac ... -
Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
2011-12-18 14:50 54809Activity的两种启动模式:FLAG_ACTIVITY_C ... -
Android换肤apk
2011-12-11 15:30 4208在android系统中,每 ... -
Androidpn的框架浅析
2011-12-11 13:47 11784开发部署方法: 1. ... -
Androidpn里的Xmpp的理解
2011-12-09 20:31 15064XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XM ... -
Log的tag的设置
2011-12-09 15:27 2457android输出日志的方法如下: int andro ... -
PopupWindow自适应布局
2011-12-04 18:24 13180Android自带的Menu菜单,常常无法满足我们的需求 ... -
Android程序换肤
2011-12-02 15:15 0Android的换肤功能,有多种方式,现在来说一下生成皮肤ap ... -
Activity与Service通信
2011-12-02 14:46 13142Activity与Service通信的方式有三种: 继 ... -
Ant自动打包2(打特殊厂商的包)
2011-11-29 15:08 4927由于公司内置的需要,我们的程序要针对不同的厂商打不同的ap ... -
Eclipse Indigo设置Courier New字体
2011-11-25 14:25 2192网上的教程如下: ... -
Fragment研究2
2011-11-24 10:43 6530几个类的结构的研 ... -
Ant自动打包
2011-08-23 15:56 39023Ant使用 在ant的官网http://ant. ... -
渐进式下载和流式下载有什么区别
2010-10-23 12:06 2329流式下载 下载边播放的BT软件,下载时必须要从电影的开头下 ...
相关推荐
第1章 androi简介 1.1 初识android 1.1.1 历史背景 1.1.2 android特性 1.1.3 android组件结构 1.1.4 android应用程序框架 1.1.5 android的竞争优势 1.1.6 android模拟器 1.2 搭建android开发环境 1.2.1 准备工作 ...
ListActivity) 95 2.4.10 可展开的列表组件(ExpandableListView) 101 2.4.11 网格视图(GridView)和 图像切换器(ImageSwitcher) 功能和用法 104 2.4.12 画廊视图(Gallery)的功能和 用法 107 ...
public class ArrayAdapterActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 列表项的数据 String[] strs = {"1", "2...
#### ExpandableListActivity简介 `ExpandableListActivity`是Android框架中用于显示层次结构数据的Activity。与传统的`ListActivity`不同,它能够展示多层级的数据,即可以有父项和子项的概念。用户可以通过点击父...
`PreferenceActivity`继承自`ListActivity`,它会自动将`Preference` XML布局文件中的各项偏好转化为可点击的列表项。这种活动类型非常适合用于创建应用的设置界面,因为它提供了标准的UI元素,如开关、单选按钮、复...
它继承自`ListActivity`,并且通过XML布局文件来定义各种偏好项(如开关、选择列表等),使得创建设置界面变得更加便捷。 ### 使用步骤 1. **创建XML偏好资源文件** 在res/xml目录下创建一个XML文件,例如`...
Vitamio 插件简介 Vitamio 是一款开源的媒体播放器库,支持多种媒体格式,包括视频、音频、图片等。Vitamio 的主要特点是轻量级、灵活、可扩展性强,支持多种平台,包括 Android、iOS、Windows 等。 使用 Vitamio ...
#### 1.1 Android API-DEMOS简介 Android API-DEMOS是Google为开发者提供的一个包含多个示例应用程序的项目,这些示例程序覆盖了Android SDK中的大部分API,旨在帮助开发者理解和学习如何正确地使用这些API来构建...
作者简介 余志龙,来自于手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及J2EE、JSP、Servlet、JavaBeans、PHP、C#等程序语言,熟悉面向对象...
1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD 1.3 Android模拟器 1.3.1 ADB工具 1.3.2 其它...