歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android程序ToDoList

Android程序ToDoList

日期:2017/3/1 9:53:07   编辑:Linux編程

本文的目的是創建一個簡單的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;

}

});

Copyright © Linux教程網 All Rights Reserved