• Android程序ToDoList


    本文的目的是创建一个简单的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;
                    }
               });
     
  • 相关阅读:
    【leetcode 461】. Hamming Distance
    【leetcode 476】. Number Complement
    大数据概述
    对于编译原理的看法
    PHP基础(二) 文件包含
    PHP基础(一)
    webpack 之(6) commonJS和 ES6 Module区别 (未完成)
    webpack 之(5) webpack.config.js配置 之 img
    webpack 之(4) webpack.config.js配置 之 html
    webpack 之(3) webpack.config.js配置 之 css/less
  • 原文地址:https://www.cnblogs.com/yjf512/p/3190779.html
Copyright © 2020-2023  润新知