本文的目的是创建一个简单的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. 【Android】android中Invalidate和postInvalidate的区别

    Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Inva ...

  2. android国际化(多语言)

    2013-03-18 23:45             13390人阅读             评论(0)             收藏              举报 1.  很大程度上,为什么 ...

  3. Gradle自定义你的BuildConfig

    BuildConfig.DEBUG 首先在Gradle脚本中默认的debug和release两种模式BuildCondig.DEBUG字段分别为true和false,而且不可更改.该字段编译后自动生成 ...

  4. WPF WebBrowser屏蔽弹出alert ,confirm ,prompt ,showModalDialog() ,window.open()

    WPF WebBrowser屏蔽弹出alert ,confirm ,prompt ,showModalDialog() ,window.open()添加Microsoft.mshtml.dll,然后写 ...

  5. RabbitMQ学习笔记5-简单的RPC调用

    利用空的queue名字("")让rabbitMQ生成一个唯一的队列名称,同时指定队列是:临时的(auto-delete).私有的(exclusive). 在发送的RPC调用消息里设 ...

  6. MySQL中导入 导出CSV

    来自:http://blog.csdn.net/sara_yhl/article/details/6850107 导出 select * from test_info into outfile '/t ...

  7. Mesos源码分析

    Mesos源码分析(1): Mesos的启动过程总论 Mesos源码分析(2): Mesos Master的启动之一 Mesos源码分析(3): Mesos Master的启动之二 Mesos源码分析 ...

  8. BugTracker.NET的配置

    需求管理+任务管理+bug管理+看板管理 要求一定要简单,切忌不要太复杂 之前用的禅道的,功能虽然很强大,但是忒复杂了,用不下去. 几点需要注意的地方: 1.web.config里邮件的地方有好几个地 ...

  9. 谷歌面经 Tree Serialization

    http://www.careercup.com/question?id=4868040812396544 You should transform an structure of multiple ...

  10. nginx+lua_nginx+GraphicsMagick生成实时缩略图

    暂做笔记,带后续验证通过后,再补充 1.2.3 步. 一.安装 lua 首先确认是否安装 readline yum -y install readline-devel ncurses-devel 进入 ...