安卓ListActivity开发手册.docx
- 文档编号:5800616
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:15
- 大小:297.05KB
安卓ListActivity开发手册.docx
《安卓ListActivity开发手册.docx》由会员分享,可在线阅读,更多相关《安卓ListActivity开发手册.docx(15页珍藏版)》请在冰豆网上搜索。
安卓ListActivity开发手册
ListActivity
应用程序开发手册
目录
1listActivity简介2
1.1listActivity事件响应4
1.1.1.列表被点击事件4
1.1.2.列表获得焦点事件5
1.2使用simpleAdapter6
1.3使用SimpleCursorAdapter9
1.4定制自己的Adapter10
1.5可扩展ListActivity12
1.6具有下拉列表的ListActivity15
2附录一文档示例源代码16
listActivity简介
ListActivity直接继承于activity,是用来在屏幕中显示一个列表的窗口应用程序,当点击窗口中的某一列时,可以触发一些操作,ListActivity是手机基本应用中最常用的一类应用程序。
为了实现ListActivity显示数据,我们需要把我们的数据绑定到一个继承于BaseAdapter的对象上。
简单来说,listActivity应用的adapter的数据源主要有arrary和cursor,先看一个简单的例子。
跟普通的activity程序一样,程序首先创建一个继承于ListActivity的子类,然后重载onCreate方法。
程序第31行,开始设置应用于listActivity的一个ListActivity,参数android.R.layout.simple_list_item_1是一个TextView的配置文件,用来设置列表中每一行的显示窗口。
mString是一个字符串数组,用来保存要存放的数据。
这个简单的程序运行效果如下:
每一个ListActivity系统都会给它指定默认的窗口布局,因此不需要我们setContentView(),但是我们也可以指定窗口的布局,如下:
xmlversion="1.0"encoding="utf-8"?
>
android=" android: layout_width="fill_parent" android: layout_height="fill_parent" android: orientation="vertical"> id="@id/android: list" android: background="#00FF00" android: layout_weight="2" android: drawSelectorOnTop="false" android: layout_width="wrap_content" android: layout_height="wrap_content"/> id="@id/android: empty" android: layout_width="wrap_content" android: layout_height="wrap_content" android: background="#FF0000" android: text="@string/no_notes"/> 这里需要注意的是那个ListView的ID,是系统自定义的android: list,不是我们随便取的,否则系统会说找不到它想要的listview了。 然后,在这个listview之外,我们又增加了一个TextView,这个系统自定义的id是Android: empty,当列表中没有数据时,屏幕变成红色来显示一个no_notes的文本。 listActivity事件响应 对于listActivity中显示的列表,我们可以重载一些函数来响应我们应该处理的事件。 listActivity继承于activity,同时组合了listView,因此一把用于activity上的回调函数应用在listActivity上,同时也可以通过getListView获得当前的listView的引用,对这个listView来设置一些监听对象来完成listView傻瓜响应的特定功能,本节简要介绍两个长用回调函数,其他的由开发人员慢慢分析。 1.1.1.列表被点击事件 某一列主题被点击事件,我们需要重载回调函数: protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid) { //addyourcode } 参数 ListViewl是你点击的列表控件, Viewv是你当前正点击的在ListView中的一项, positon是被点击的行在列表中的位置,这个位置从0开始算起, id是被点击的行号。 *@paramlTheListViewwheretheclickhappened *@paramvTheviewthatwasclickedwithintheListView *@parampositionThepositionoftheviewinthelist *@paramidTherowidoftheitemthatwasclicked 比如我们要获取当前点击的行中的内容在,可以这么做: protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid) { //addyourcode TextViewtext=(TextView)l.getItemAtPosition(position); StringmyItem=text.getText(); } 通过getItemAtPosition(position)返回的是一个view对象,这个对象需要你强制转换成你事实中正使用的对象类型。 这一点请关注后面的Cursor和一些自己定义的Adapter情况。 1.1.2.列表获得焦点事件 对于列表获得焦点事件,我们可以直接接在它组合的listView上注册获得焦点函数来完成,在onCreate函数中添加以下代码: this.getListView().setOnItemSelectedListener(newOnItemSelectedListener() { @Override publicvoidonItemSelected(AdapterViewparent,Viewv,intposition,longid) { showAlert((CharSequence)"SelectionChanged...",R.drawable.star_big_on,(CharSequence)("Position: "+position),(CharSequence)("OK"),false); } @Override publicvoidonNothingSelected(AdapterViewarg0) { //DoNothing } }); 这个注册的监听事件,是当有一行被选择时(高亮度显示),会出现一个对话框提示你正选择的位置。 使用simpleAdapter simpleAdapter跟其名字大不一样,使用起来必ArraryAdapter稍微复杂一些: 使用这个simpleAdapter主要出现在自己要指定一个list 第36行,创建一个继承于listActivity的子类。 第41行,设置这个窗口程序的listView界面布局。 第42行,设置listActivity的和listView之间的数据适配器,这个适配器的地一个参数是当前的对象,第二个参数是我们要用到的映射成map的list结构数据,第三个参数是每一行列表的布局,可以看看这个布局文件是两个textView,第四个参数是一个字符串数组,设置了map对象中文本显示的顺序,第五个参数依次把第四个参数数组中应该映射的文本依次映射到listView中每一行的布局上去。 第46行,是生成一个list 本节程序的源代码见附件Simple_adapter工程 程序的配置文件依次如下,layout.main xmlversion="1.0"encoding="utf-8"? > android=" android: layout_width="fill_parent" android: layout_height="fill_parent" android: orientation="vertical"> id="@id/android: list" android: layout_weight="2" android: drawSelectorOnTop="false" android: layout_width="wrap_content" android: layout_height="wrap_content"/> id="@id/android: empty" android: layout_width="wrap_content" android: layout_height="wrap_content" android: text="nodata"/> Layout.list_item xmlversion="1.0"encoding="utf-8"? > android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent" > id="@+id/item" android: layout_width="wrap_content" android: layout_height="wrap_content" android: textSize="28sp" android: textColor="#FF0000"/> id="@+id/item2" android: layout_width="wrap_content" android: textSize="18sp" android: textColor="#00FF00" android: layout_height="wrap_content"/> 程序运行的效果如下: 使用SimpleCursorAdapter SimpleCursorAdapter是把数据库中查询到的结果映射到listView的方式,这个类的使用方式跟SimpleAdapter中的例子方式类似,本文不作细讲,主要说说数据映射段。 首先是通过数据库查找数据,数据保存在Cursor类的对象cursor中。 Cursorcursor=managedQuery(getIntent().getData(),PROJECTION,null,null, Notes.DEFAULT_SORT_ORDER); 然后开始把数据映射到SimpleCursorAdapter对象,这个对象的第二个参数是列表中每一行的布局,第三个参数是当前保存查询出数据的游标。 第四个参数和第五个参数跟SimpleAdapter中对应的参数相同。 SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.noteslist_item,cursor,newString[]{Notes.TITLE},newint[]{android.R.id.text1}); 把映射的SimpleCursorAdapter对象设置到listActivity中。 setListAdapter(adapter); 然后其他的应用方式跟listActivity方式完全一样。 定制自己的Adapter 由于目前android还不够强大,很多listAdapter需要我们自己定制,因此我们可以根据我们的需要创建一个继承于BaseAdapter的类,然后把我们自己定制的对象设置到listActivity中。 比如我们要创建一个列表,列表的前面是一个图标,后面是文本。 看例子如下: 先创建每一行中显示的View,如下: publicstaticclassImageTextViewextendsLinearLayout { publicTextViewmTextView; publicImageViewmImageView; publicImageTextView(Contextcontext,Stringtitle,Drawabledrawable) { super(context); this.setOrientation(HORIZONTAL); mImageView=newImageView(context); mImageView.setImageDrawable(drawable); mImageView.setPadding(0,2,5,2); addView(mImageView,newLinearLayout.LayoutParams(40,30)); mTextView=newTextView(context); mTextView.setText(title); mTextView.setTextSize(18); addView(mTextView,newLinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT,30)); } } 这个表示是一个线形布局的view,这个view中有一个TextView和一个ImageView。 构造函数中设置这两个view的布局方式是水平布局,接着设置这两个组合的view的显示方式和位置。 然后创建一个我们自己的继承于BaseAdapter的子类,创建继承于BaseAdapter的子类必须重载5个函数。 publicclassListCombinAdapterextendsBaseAdapter { privateContextmContext; privateList publicListCombinAdapter(Contextctx) { mContext=ctx; mObjects=newArrayList } publicintgetCount() { returnmObjects.size(); } publicObjectgetItem(intposition) { returnmObjects.get(position); } publicintgetPosition(Objectitem) { returnmObjects.indexOf(item); } publiclonggetItemId(intposition) { return(long)position; } publicViewgetView(intposition,ViewconvertView,ViewGroupparent) { ImageTextViewitv; if(convertView==null) { itv=newImageTextView(mContext,(String)mObjects.get(position).mTextView.getText(), mObjects.get(position).mImageView.getDrawable()); } else { itv=(ImageTextView)convertView; itv.mTextView=mObjects.get(position).mTextView; itv.mImageView=mObjects.get(position).mImageView; } returnitv; } publicvoidaddItem(Stringtext,Drawabledrawable) { mObjects.add(newImageTextView(mContext,text,drawable)); } } 最后在listActivity的onCreate中设置我们的listActivity,如下: @Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); ListCombinAdapterlistAda=newListCombinAdapter(this); listAda.addItem("music",etResources().getDrawable(R.drawable.icon48x48_1)); listAda.addItem("home",getResources().getDrawable(R.drawable.icon48x48_2)); setListAdapter(listAda); } 本例子中只创建了两行文本,程序运行效果如下: 当然,本例子中创建的ImageTextView,也可以通过设置配置文本的方式来设置布局。 本节程序源代码见附件中的工程里斯塔CombinAdapter 可扩展ListActivity 制作可扩展效果的ListActivity,可以利用在每一列List中,设置多行文本或图形控件,当鼠标点击该行列表时,列表中隐藏的一行文本显示出来,当再次点击该行时,该行的一行文本又隐藏起来,达到列表内容可扩展的效果,这种控件显示行为可通过设置控件的VISIBLE来达到效果。 如下例子效果: 实现这种效果的关键算法制定一个自己的listAdapter,这个listAdapter在接收到列表点击事件时,交替设置该行列表中视图的某个控件的可见性,view.setVisibility(GONE)或者view.setVisibility(VISIBLE)。 然后发送数据改变通知: notifyDataSetChanged(); 对于每一行的View视图,要有一个字段保存当前某个控件是否可变的信息,通过这个信息来在鼠标点击该行时交替设置控件的可见性,关键代码如下: 程序第83行,创建一个基于LinearLayout的viewGroup。 程序第87行至99行,设置这个externView的两个TextView的布局。 程序第100行,设置这个view中的mNumber初始不可见。 程序第102行至105行,反向设置mNumber的可见性,当前可见这设置成不可见,当前不可见这设置成可见。 程序第107行至110行,根据所带参数是true还是false来设置mNumber的可见和不可见。 程序第31行,响应列表被点击时的回调函数。 程序第33行,获取当前的listAdapter,强制转换成externListAdapter,然后做position位置的行扩展设置。 程序第38行,重载BaseAdapter的虚函数。 程序第57行至60行,通过列表中的行位置,找到列表对象,然后交替设置该行中的可扩展对象的可见性,设置好了后,发送数据状态改变通知给数据观察对象。 数据官场对象将更新当前视图; 程序具体源代码,见附件中的工程externList。 具有下拉列表的ListActivity 具有下拉列表的listActivity产生效果在一个listView中,每点击其中一行,则这行会展开出一个新的子listView。 同时父listView和子listView都具有响应一些点击或者选择事件的能力。 实现这种形式的activity,系统已经为我们提供了一个标准的ExpandableListActivity,,跟普通的ListActivity一样,我们需要给ExpandableListActivity设置一个ExpandableListAdapter适配对象,这个ExpandableListAdapter可以是简单的继承一个BaseExpandableListAdapter,也可以继承一个SimpleCursorTreeAdapter,来完成对与数据库的查询映射,同样也可以是一个SimpleExpandableListAdapter对象,来完成对map对象数据映射的任务。 上面各种形式的可扩展树形列表,可常见SDK中自带的工程ApiDemos中的com.android.samples.view包中的ExpandableList1.java,ExpandableList2.java,ExpandableList3.java。 附录一文档示例源代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ListActivity 开发 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)