安卓ListActivity开发手册参考模板_第1页
安卓ListActivity开发手册参考模板_第2页
安卓ListActivity开发手册参考模板_第3页
安卓ListActivity开发手册参考模板_第4页
安卓ListActivity开发手册参考模板_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ListActivity应用程序开发手册目 录1 / 171 listActivity 简介21.1 listActivity事件响应41.1.1. 列表被点击事件41.1.2. 列表获得焦点事件51.2 使用simpleAdapter61.3 使用SimpleCursorAdapter91.4 定制自己的Adapter101.5 可扩展ListActivity121.6 具有下拉列表的ListActivity152 附录一 文档示例源代码161 listActivity 简介ListActivity 直接继承于activity,是用来在屏幕中显示一个列表的窗口应用程序,当点击窗口中的某一列时

2、,可以触发一些操作,ListActivity是手机基本应用中最常用的一类应用程序。为了实现ListActivity显示数据,我们需要把我们的数据绑定到一个继承于BaseAdapter的对象上。简单来说,listActivity应用的adapter的数据源主要有arrary和cursor,先看一个简单的例子。跟普通的activity程序一样,程序首先创建一个继承于ListActivity的子类,然后重载onCreate方法。程序第31行,开始设置应用于listActivity的一个ListActivity,参数android.R.layout. simple_list_item_1是一个Text

3、View的配置文件,用来设置列表中每一行的显示窗口。mString是一个字符串数组,用来保存要存放的数据。这个简单的程序运行效果如下:每一个ListActivity系统都会给它指定默认的窗口布局,因此不需要我们setContentView(),但是我们也可以指定窗口的布局,如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layou

4、t_height="fill_parent" android:orientation="vertical"><ListView android:id="id/android:list"android:background="#00FF00" android:layout_weight="2" android:drawSelectorOnTop="false" android:layout_width="wrap_content" android

5、:layout_height="wrap_content"/> <TextView android:id="id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content"android:background="#FF0000" android:text="string/no_notes"/> </LinearLayout>这里需要

6、注意的是那个ListView的ID,是系统自定义的android:list,不是我们随便取的,否则系统会说找不到它想要的listview了。然后,在这个listview之外,我们又增加了一个TextView,这个系统自定义的id是Android:empty,当列表中没有数据时,屏幕变成红色来显示一个no_notes 的文本。1.1 listActivity事件响应对于listActivity中显示的列表,我们可以重载一些函数来响应我们应该处理的事件。listActivity继承于activity,同时组合了listView,因此一把用于activity上的回调函数应用在listActivity

7、上,同时也可以通过getListView获得当前的listView的引用,对这个listView来设置一些监听对象来完成listView傻瓜响应的特定功能,本节简要介绍两个长用回调函数,其他的由开发人员慢慢分析。1.1.1. 列表被点击事件某一列主题被点击事件,我们需要重载回调函数:protected void onListItemClick(ListView l, View v, int position, long id) / add your code参数 ListView l 是你点击的列表控件,View v是你当前正点击的在ListView中的一项,positon 是被点击的行在列表

8、中的位置,这个位置从0开始算起,id 是被点击的行号。 * param l The ListView where the click happened * param v The view that was clicked within the ListView * param position The position of the view in the list * param id The row id of the item that was clicked比如我们要获取当前点击的行中的内容在,可以这么做:protected void onListItemClick(ListView

9、 l, View v, int position, long id) / add your codeTextView text = (TextView)l.getItemAtPosition(position); String myItem = text.getText();通过getItemAtPosition(position)返回的是一个view对象,这个对象需要你强制转换成你事实中正使用的对象类型。这一点请关注后面的Cursor和一些自己定义的Adapter情况。1.1.2. 列表获得焦点事件对于列表获得焦点事件,我们可以直接接在它组合的listView上注册获得焦点函数来完成,在on

10、Create函数中添加以下代码: this.getListView().setOnItemSelectedListener(new OnItemSelectedListener() Override public void onItemSelected(AdapterView parent, View v,int position, long id) showAlert(CharSequence)"Selection Changed.", R.drawable.star_big_on,(CharSequence)("Position: " + posit

11、ion), (CharSequence)("OK"), false); Override public void onNothingSelected(AdapterView arg0) / Do Nothing );这个注册的监听事件,是当有一行被选择时(高亮度显示),会出现一个对话框提示你正选择的位置。1.2 使用simpleAdaptersimpleAdapter跟其名字大不一样,使用起来必ArraryAdapter稍微复杂一些:使用这个simpleAdapter主要出现在自己要指定一个list<map>的数据映射的时候,还是先看看简单的例子。第36行,创建

12、一个继承于listActivity的子类。第41行,设置这个窗口程序的listView界面布局。第42行,设置listActivity的和listView之间的数据适配器,这个适配器的地一个参数是当前的对象,第二个参数是我们要用到的映射成map的list结构数据,第三个参数是每一行列表的布局,可以看看这个布局文件是两个textView,第四个参数是一个字符串数组,设置了map对象中文本显示的顺序,第五个参数依次把第四个参数数组中应该映射的文本依次映射到listView中每一行的布局上去。第46行,是生成一个list<map<string,string> >对象,用来保存

13、当前的数据。本节程序的源代码见附件 Simple_adapter工程程序的配置文件依次如下,layout.main<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <L

14、istView android:id="id/android:list" android:layout_weight="2" android:drawSelectorOnTop="false" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="id/android:empty" android:layout_width=&

15、quot;wrap_content" android:layout_height="wrap_content" android:text="no data"/> </LinearLayout>Layout.list_item<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:orientation="vertical" android:lay

16、out_width="fill_parent" android:layout_height="fill_parent" ><TextView android:id="+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="28sp" android:textColor="#FF0000"/> &

17、lt;TextView android:id="+id/item2" android:layout_width="wrap_content" android:textSize="18sp" android:textColor="#00FF00" android:layout_height="wrap_content"/></LinearLayout>程序运行的效果如下:1.3 使用SimpleCursorAdapterSimpleCursorAdapter是把数据库中查询到的结

18、果映射到listView的方式,这个类的使用方式跟SimpleAdapter中的例子方式类似,本文不作细讲,主要说说数据映射段。首先是通过数据库查找数据,数据保存在Cursor类的对象cursor中。Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, Notes.DEFAULT_SORT_ORDER);然后开始把数据映射到SimpleCursorAdapter对象,这个对象的第二个参数是列表中每一行的布局,第三个参数是当前保存查询出数据的游标。第四个参数和第五个参数跟SimpleAdapter中

19、对应的参数相同。SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.noteslist_item, cursor,new String Notes.TITLE , new int android.R.id.text1 );把映射的SimpleCursorAdapter对象设置到listActivity中。setListAdapter(adapter);然后其他的应用方式跟listActivity方式完全一样。1.4 定制自己的Adapter由于目前android还不够强大,很多listAdapter需要我们自

20、己定制,因此我们可以根据我们的需要创建一个继承于BaseAdapter的类,然后把我们自己定制的对象设置到listActivity中。比如我们要创建一个列表,列表的前面是一个图标,后面是文本。看例子如下:先创建每一行中显示的View,如下:public static class ImageTextView extends LinearLayout public TextView mTextView; public ImageView mImageView; public ImageTextView(Context context, String title, Drawable drawable

21、) super(context); this.setOrientation(HORIZONTAL); mImageView = new ImageView(context); mImageView.setImageDrawable(drawable); mImageView.setPadding(0, 2, 5, 2); addView(mImageView, new LinearLayout.LayoutParams(40, 30); mTextView = new TextView(context); mTextView.setText(title); mTextView.setTextS

22、ize(18); addView(mTextView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, 30); 这个表示是一个线形布局的view,这个view中有一个TextView和一个ImageView。构造函数中设置这两个view的布局方式是水平布局,接着设置这两个组合的view的显示方式和位置。然后创建一个我们自己的继承于BaseAdapter的子类,创建继承于BaseAdapter的子类必须重载5个函数。public class ListCombinAdapter extends BaseAdapter priva

23、te Context mContext; private List<ImageTextView> mObjects; public ListCombinAdapter(Context ctx) mContext = ctx; mObjects = new ArrayList<ImageTextView>(); public int getCount() return mObjects.size(); public Object getItem(int position) return mObjects.get(position); public int getPosit

24、ion(Object item) return mObjects.indexOf(item); public long getItemId(int position) return (long)position; public View getView(int position, View convertView, ViewGroup parent) ImageTextView itv; if (convertView=null) itv = new ImageTextView(mContext,(String)mObjects.get(position).mTextView.getText(

25、), mObjects.get(position).mImageView.getDrawable(); else itv = (ImageTextView)convertView; itv.mTextView = mObjects.get(position).mTextView; itv.mImageView = mObjects.get(position).mImageView; return itv; public void addItem(String text,Drawable drawable) mObjects.add(new ImageTextView(mContext,text

26、,drawable); 最后在listActivity的onCreate中设置我们的listActivity,如下: Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); ListCombinAdapter listAda = new ListCombinAdapter(this); listAda.addItem("music", etResources().getDrawable(R.drawable.icon48x48_1); listA

27、da.addItem("home", getResources().getDrawable(R.drawable.icon48x48_2); setListAdapter(listAda); 本例子中只创建了两行文本,程序运行效果如下:当然,本例子中创建的ImageTextView,也可以通过设置配置文本的方式来设置布局。本节程序源代码见附件中的工程里斯塔CombinAdapter1.5 可扩展ListActivity制作可扩展效果的ListActivity,可以利用在每一列List中,设置多行文本或图形控件,当鼠标点击该行列表时,列表中隐藏的一行文本显示出来,当再次点击该

28、行时,该行的一行文本又隐藏起来,达到列表内容可扩展的效果,这种控件显示行为可通过设置控件的VISIBLE来达到效果。如下例子效果:实现这种效果的关键算法制定一个自己的listAdapter,这个listAdapter在接收到列表点击事件时,交替设置该行列表中视图的某个控件的可见性,view.setVisibility(GONE)或者view.setVisibility(VISIBLE)。然后发送数据改变通知:notifyDataSetChanged();对于每一行的View视图,要有一个字段保存当前某个控件是否可变的信息,通过这个信息来在鼠标点击该行时交替设置控件的可见性,关键代码如下:程序第83行,创建一个基于LinearLayout的viewGroup。程序第87行至99行,设置这个ext

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论