Android快速入門的第二個App(講解版)
總結一下todolist這個app制作的大緻步驟。
- 先用eclipse生成相關的模闆。
- 編輯layout——界面搭好,對每一個View屬性寫好。
- 然後在activity的java檔案中寫邏輯
- 最後增加存儲功能。
1. 先用eclipse生成相關的模闆。
這個就不用講了。
2. 編輯layout——界面搭好,對每一個View屬性寫好。
在生成這個界面的時候,我們最好先使用拖拽功能,每一個XML檔案均可以有Graphic界面,在這個界面下,我們可以what you see is what you get。在圖形界面下,你可以看用每一個控件的屬性,研究每一個屬性。這樣來說上手速度會比較快一些。當然,這是前期你需要打基礎的時候使用的,後期我感覺直接用代碼編輯會比較好一些(圖形界面太卡)。
如果你有相關拖拽控件程式設計的經曆的話(delphi),應該會非常容易上手,很多屬性都是一樣的。
回到本文,提一下需要關注的點:
- 關于@+id/balabala,這個需要注意他們是怎麼命名的,btnAddItem edNewItem lvItems,這些是小駝峰命名法,這種命名方法主要應用于JAVA代碼中的變量名和函數名。當我們在java檔案中寫邏輯的時候,我們盡量使用這種方法xml裡面名字與java變量名或者函數名稱相同的方法來命名。(eg:xml檔案中 id 為 “lvItems”的,java檔案中是這麼定義并,引用的,首先定義Listview lvItems;然後 lvItems = (ListView) findViewById(R.id.lvItems); )
- 我覺得如果控件比較多的話,先拿紙筆畫個草圖并為之命名好各個部件這樣的話不會混亂。
3. 然後在activity的java檔案中寫邏輯
這個就是本文的重點部分羅,
你在前面已經完成了相關的圖形操作,android工具在R.java部分已經為之處理好了java與Res/檔案夾之間聯系。
現在進行的操作如下
- 在listView上面顯示出來
- ADD按鈕可以添加任務
按照先難後易的道理,
1. 第一個listview的處理。
- Arraylist 等等集合類需要有一定了解,不懂的話看這裡随便百度看一下。
- 關于listview 和 Adapter也需要有一定的了解(非要簡單概括一下的話Adapter就是翻譯官,負責溝通資料和界面呈現的翻譯官。)http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html
- 增加任務,不增加任務怎麼叫做todolist?這個比較簡單。
- 如果需要代碼的話到這裡下載下傳 http://blog.csdn.net/ctt594088/article/details/38174067
public class TodoActivity extends Activity {
ArrayList<String> items;
ArrayAdapter<String> itemsAdapter;
ListView lvItems;
//在這裡建立友善下面的資料引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
//引用界面上的listview
lvItems = (ListView) findViewById(R.id.lvItems);
items = new ArrayList<String>();
itemsAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
//第一個array擴充卡
lvItems.setAdapter(itemsAdapter);
//對圖形界面上面的listview(lvItems)搭載擴充卡(itemsAdapter);
items.add("1st")
//添加第一組資料,僅僅用于測試,過會就會删除。
}
注意:第一個表示執行個體化的actvity(java基本知識),第二個表示 系統資源ID(是android.R.balabala),第三個表示傳入的資料(其實是資料的引用)。
根據引用ArrayAdapter會調用toString(),将items包裝,并以simple_list_item_1樣子顯示出來。
Next,我們添加一個Button的事件,xml檔案中,為button添加onClick屬性,命名屬性值為 android:onClick=”addTodoItem”
然後在todoactivity.java中添加函數。如下:
圖檔2(注意畫箭頭部分)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcRzZE1EMrRlTwI1MZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN2kDO0YTN0ETOycDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
public void addTodoItem(View v) {
EditText etNewItem = (EditText) findViewById(R.id.edNewItem);
//找到界面控件
itemsAdapter.add(etNewItem.getText().toString());
//也可以寫成 items.add(etNewItem.getText().toString());
etNewItem.setText("");
//清空edittext
}
可以添加,但是任務做完了總要删除吧?
好,我們現在實作删除功能——listview中長按删除功能。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
lvItems = (ListView) findViewById(R.id.lvItems);
items = new ArrayList<String>();
readItem();
itemsAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
lvItems.setAdapter(itemsAdapter);
setupListviewListener();
//添加函數
}
private void setupListviewListener() {
lvItems.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
items.remove(arg2);
//移除
itemsAdapter.notifyDataSetChanged();
//這一句不能不寫
return true;
}
});
}
注意,我剛剛說,itemsAdapter.notifyDataSetChanged();不能不寫,為什麼呢?這可能涉及到異步處理(涉及到數組的處理,我也暫時不太了解,不寫報錯),先記住。等我查完資料以後再補充。
4. 最後增加存儲功能。
http://download.csdn.net/detail/ctt594088/7683963,存儲功能需要用到apache的一個第三方包。
直接把相關包拖入一個lib中,
接着編寫下面代碼。
private void readItem() {
// TODO Auto-generated method stub
File filesDir = getFilesDir();
File todoFile = new File(filesDir, "todo.txt");
try {
items = new ArrayList<String>(FileUtils.readLines(todoFile));
} catch (IOException e) {
// TODO: handle exception
items = new ArrayList<String>();
e.printStackTrace();
}
}
private void saveitems() {
File filesDir = getFilesDir();
File todoFile = new File(filesDir, "todo.txt");
try {
FileUtils.writeLines(todoFile, items);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
因為使用了第三方包,是以寫起來非常順暢。
使用了trycatch異常機制。
分别在onCreate()開始初始化界面時候調用readItem,然後在Add資料和消除資料的時候調用saveitems。
總結
好了,第一個程式就完成了。發現,寫一步一步的教程還是太費時間了。
源碼下載下傳位址:
http://download.csdn.net/detail/ctt594088/7684281