便签软件开发笔记——日期列表界面及操作定义

 本文介绍日期列表界面的布局以及相关动作的定义。

 

顾名思义,日期列表界面就是以列表的形式来显示datelist表中的条目,包括日期、该日期的总便签数以及总完成数。

 

一 界面布局

日期列表界面类继承了ListActivity类,根据google android参考手册的介绍,ListActivity类是一个ListView的宿主,并提供了相关事件处理的接口。

 

ListActivity类默认提供了一个布局,这个布局是一个位于屏幕中央的全屏的列表(id为@android:id/list)。如果列表没有数据,你可以显示一个“empty list”的通知(id为android:empty),而且这时你可以显示任意类型的组件。

 

有时,我们需要定义自己的ListActivity的布局,那么这个布局仍然要包含一个id为@android:id/list的ListView对象和一个id为@android:empty的TextView。如下:

 

除了定义全屏的布局之外,我们还必须定义每个列表行的布局,如下:

 

除了布局之外,由于在布局的xml文件中,我们要使用到一些命名的字符串常量,所以我们也必须在res/values/strings.xml文件中定义这些常量。如下:

二 代码说明

定义好界面布局之后,就可以编写代码了。下面是日期列表界面的实现类:

下面说明一些细节。

 

fillData这个方法主要是从datelist表中获取数据并填充到日期列表界面中。从上面看到的,使用了一个SimpleCursorAdapter适配器来作为ListView的数据源。根据google android参考手册,SimpleCursorAdapter的简介如下:

 

 


 

SimpleCursorAdapter是一个用于映射游标的列到XML文件中定义的TextViews或者ImageViews的适配器。你可以指定你要显示的列以及显示的相对应的views,还可以指定显示这些views的布局(其实,就是一个列表中的行的布局)。绑定布局和数据源有两种方式。第一种,如果SimpleCursorAdapter.ViewBinder可用,那么就调用setViewValue(android.view.View,android.database.Cursor,int)来进行绑定。如果返回值为true,那么绑定成功。如果返回false,且指定的组件式TextView,那么就调用setViewText(TextView, String)来指定绑定失败要显示的值,如果指定的组件是ImageView,那么就调用setViewImage(ImageView,String)来指定显示的值。If no appropriate binding can be found, an IllegalStateException is thrown这一句说的应该是指SimpleCursorAdapter.ViewBinder不可用的情况下进行绑定发生的情况吧。下面这一句说的还没学习到,不敢乱说,原文奉上,先Mark。

If this adapter is used with filtering, for instance in an AutoCompleteTextView, you can use the SimpleCursorAdapter.CursorToStringConverter and the FilterQueryProvider interfaces to get control over the filtering process. You can refer to convertToString(android.database.Cursor) and runQueryOnBackgroundThread(CharSequence) for more information.


在fillData这个方法中,我们指定了mmdate/mmtotal/mmcomp列分别绑定到R.id.text_date/R.id.text_total/R.id.text_complete三个TextView中。并指定了date_row.xml这个文件定义的布局为行的布局。

 

 

这段代码主要定义了上下文菜单,也就是我们在某一个列表项上长按2秒后弹出的菜单。onCreateContextMenu添加一个菜单项,而onContextItemSelected则响应用户的点击事件。

MenuItem.getItemId这个方法返回用户点击的菜单项的id,这个id是我们在插入菜单项时指定的。

MenuItem.getMenuInfo返回的是我们所点击的view设置的附加信息,在ListActivity中我们绑定游标到ListView时,会将游标中的rowid设置进去。这个rowid列名是“_id”,所以我们创建表时也使用这个默认的列名。AdapterContextMenuInfo类中会包含“_id”的值。之后,我们获取到的信息中会返回这个rowid,那么我们就可以利用这个rowid进行相关的数据库操作。

 

 

 

这一段代码也是创建菜单,当我们按下手机上的“Menu”键的时候就会弹出该菜单。

 

 

 

当用户点击列表行上的view的时候就会调用该函数进行处理。

当用户点击日期列表界面上的行时,就会跳转到memo的列表界面,显示该日期对应的所有memo。所以,我们必须传递我们所点击的行所对应的rowid给memo列表界面。这儿调用Intent.putExtra来设置我们所要传递的值。

 

 

我们进行Activity的跳转时使用的是startActivityForResult,那么当我们在新的Activity上完成工作之后回到当前的Activity会返回一个结果值,当前的Activity会调用onActivityResult进行处理。这儿,我们让界面重新显示所有的日期列表项。

 

本文中,主要涉及到日期列表的显示、上下文菜单的创建、菜单的创建、列表项点击的处理以及处理另外一个Activity返回结果这几个方面。如果开发其他程序可以依此类推。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值