本文的目的是创建一个简单的ToDoList列表。

这个应用的功能是记录我的代办事项,简单到不需要本地存储,所有的代办事项都只是存储在内存中,就是只有程序打开的时候可以增加查看代办事项,当程序关闭的时候,代办事项就清空了。

代码在:https://github.com/jianfengye/Android_Works/tree/master/ToDoList

1 流程

流程和Windows Form的开发一样:

首先是界面设计,res/layout/main.xml 的设计。这里如果使用Android Common Xml Editor的话,可以使用可视化的控件设计。当然也可以直接使用xml的文本编辑器。

其次是程序中使用到的常量。res/values/中存放的就是配置参数的键值了。

再下来就是程序逻辑了。编写src/中的java逻辑代码。

2 layout

layout定义了一个可视化的用户界面,我们可以使用两种方法来定义layout:

在XML中定义UI元素

在运行时延迟加载UI元素

使用XML定义UI元素的好处就是将逻辑层和现实层分离开。通常情况下,XML中的控件元素名称和控件类名称是对应的,而且属性的名称和类的方法也是对应的,比如EditText控件有个text属性,那么在EditText控件类中就有个setText()方法。

每个控件都可以有一个id属性,在res/main.xml中,对一个控件设置id属性应该使用@符号开头,比如<Button android:id="@+id/my_button">,其中的@符号表示这个字符串应该被当作id字符串和id资源被解析。其中的+号表示这个是个新资源文件,必须被加到R.java文件中去。拥有ID属性的控件可以在程序中使用findViewById定位出来。

每个控件都需要设置的是layout_width和layout_height,表示这个控件的大小。

这两个属性的值可以是wrap_content和fill_parent(在 API LEVEL 8之后也叫match_parent

)。wrap_content意思是仅仅包含住内容的大小就行了。fill_parent的意思是扩展到父节点的大小。

注意,在长度设置的时候,不要使用像素大小来进行设置(尽管那个是可行的)。建议使用dp(像素无关大小),wrap_content或者fill_parent进行设置。

layout的类型分为三种:linear layout, relative layout 和 webview。

linear layout意思是线性的,分层的排列,和html中默认的标签排序是一样的。

relative layout意思是相对的,和html中relative的意思是一样的。

webview就是可以内嵌html进行处理。这个也是现在很多应用使用的方法了。

3 ArrayAdapter

layout除了可以通过xml在onCreate的时候绘制,也可以在运行中不断增加,即内容是动态的。我们可以使用AdapterView来进行增加。具体就是将一个ArrayAdapter绑定到一个AdapterView上。比如ListView。

大概的代码如下:

        ListView myListView = (ListView)findViewById(R.id.myListView );
final EditText myEditText = (EditText)findViewById(R.id.myEditText ); //获得对UI小组件的引用
final ArrayList<String> todoItems = new ArrayList<String>(); final ArrayAdapter<String> aa; aa = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1 , todoItems); myListView.setAdapter(aa);

然后当你修改了ArrayAdapter中的值的时候,你需要通知其绑定的控件做更新,就要使用notifyDataSetChanged()这个函数了。

比如:

        myEditText .setOnKeyListener(new View.OnKeyListener() {

                 @Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN )
if((keyCode == KeyEvent.KEYCODE_DPAD_CENTER ) ||
(keyCode == KeyEvent.KEYCODE_ENTER )) {
todoItems.add(0, myEditText.getText().toString());
aa. notifyDataSetChanged();
myEditText.setText( "");
return true;
}
return false;
}
});
 

Android程序ToDoList的更多相关文章

  1. Android程序ToDoList增加配置项页面

    本文要做的事情就是在前面做的简单的ToDoList程序上增加一个配置项页面(Reference).这个Reference页面也非常简单: 这个ToDoList现在有两个页面,主页面能填写待办事项,然后 ...

  2. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  3. 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

    正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...

  4. 怎么让我们自己开发的Android程序设为默认启动

    怎么让我们自己开发的Android程序设为默认启动呢?其实很简单,只要在AndroidManifest.xml文件中配置一下首次启动的那个Activity即要. <activity        ...

  5. Android程序crash处理

    Android程序crash处理 时间 2014-11-24 13:45:37  CSDN博客 原文  http://blog.csdn.net/allen315410/article/details ...

  6. 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  7. android开发------第一个android程序

    好吧,现在我们就一起来写第一个android程序,看它带给了我们什么.sdk的使用和虚拟机的创建我就不说了.项目创建过程先略过,不太重要. 那第一个程序我们能学到什么知识呢?一起看吧.^-^ 在IDE ...

  8. 小米手机(HM1SW)高通开发android程序全过程

    小米手机(HM1SW)开发android程序全过程 修改历史: 2016年5月9日  --------  整理文档 a.增加了手机基本信息. b.增加360手机助手连接说明 2016年2月26日  - ...

  9. 使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)

    使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB) http://www.cnblogs.com/mrkelly/p/4015245.html 以往调试Androi ...

随机推荐

  1. 关于 c# 操作 world

    把数据存放在datatable 中并循环取出来数据然后再保存在world中 protected void ExportToWord(DataSet Ads) { try { Object Nothin ...

  2. Selenium实战脚本集(4)--简单的开发者头条客户端

    描述 去开发者头条抓取本日的top 10内容,也就是排在前面的10个,需要抓取标题和url 将这些内容保存在数据库,推荐使用sqlite 写个简单的客户端,要求可以展示每日的内容,点击标题后可以打开浏 ...

  3. Django 源码小剖: 初探中间件(middleware)

    因为考虑到文章的长度, 所以 BaseHandler 的展开被推迟了. 在 BaseHandler 中隐藏着中间件的信息, 较常见的 SessionMiddleware 就已经默认安装.  BaseH ...

  4. IOC错误

    问题描述: The type DbConnection cannot be constructed. You must configure the container to supply this v ...

  5. 将树苺派升级到Raspbian 8 (Jessie)

    我的树苺派2B跑的是Raspbian 7 (Wheezy),有不少软件都让我觉察出老旧来.想着Debian官方已经发布Debian 8 (Jessie)大半年了(8.0发布于2015/04/25),树 ...

  6. struts2:遍历自定义字符串数组,遍历Action实例所引用对象中的数组

    在struts2:OGNL表达式,遍历List.Map集合:投影的使用一文中已经讲述了OGNL遍历List.Map集合等功能. 本文简单写一个遍历数组的示范程序. 1. 遍历自定义字符串数组 < ...

  7. LNAMP架构中后端Apache获取用户真实IP地址的2种方法(转)

    一.Nginx反向代理配置: 1.虚拟主机配置 复制代码代码如下: location / {    try_files $uri @apache;} location @apache {interna ...

  8. Unity3D常用代码总结

    1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1 GUI.Box(Rect(1,2 ...

  9. makeimg

    >./simg2img [system.img] [system2.img]>mount -o loop [system2.img] [s/]>./make_ext4fs -s -l ...

  10. POJ 1804 Brainman

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7787   Accepted: 4247 Descript ...