網頁

2010年7月16日 星期五

關於ListView

這裡有一篇好文章,http://www.javaeye.com/topic/540423


寫慣了windows上的程式,一直以為ListView是一個物件,
研究之後發現他比較像是一個佈局,這個佈局裡可以存放各式樣的XML
所以MARKET是ListView,YOUTUBE DOWNLOADER也是ListView的使用,很難想像它們相同ListView
所以ListView也不會太簡單的讓我想加文字就像windows這樣隨便加,
詳細的狀況等我學會一點再來心得分享一番。

2010年7月14日 星期三

Android軟體生命週期

Android 主要是使用在手機上,所以應用程式必須要對於程式中斷做出相對應的政策,才是好的程式,要不然電話一來,程式就當機,或是引響到手機通話功能,最糟的是,當程式離開了,還有一個無窮回圈一值在背景執行,導致手機很快就沒電,這樣的設計都是很不好的。

所以了解Android的生命週期很重要,我想要以CASE的方式介紹生命週期
了解生命週期之前必須先了解Android 並不會關閉程式,執行程式的時候中途按下 BACK 或是 MENU離開程式回到桌面時,程式依然會保留在記憶體內沒有被釋放,所以才會有task kill 這類程式來強制關閉應用程式。

心法:
畫面失去焦點 啟動pause 回到焦點 resume
畫面被蓋掉 啟動 Stop 畫面回來 START




1.當程式啟動的時候執行三個流程
OnCreat->OnStart -> OnResume

2.這時候按下Back 回到畫面 執行三個流程
OnPaus-->OnStop -->OnDestory

3.啟動另外一個ACTIVE

舊Active pause --> 新Active on Creat --> 新Active onStart --> 新Active onResume 舊Active Stop

4.程式執行時按下電源鈕讓手機進入休眠
Active pause

5.程式由休眠再度打開電源
Active Resume


6.程式執行時電話來了
Active onPause-->Active OnStop

8.接聽後掛掉電話
ReStart -->Start-->Resume

9.手機簡訊來了
不會暫停程式

10.手機撥來只響一聲就掛掉
Active onPause--> Resume

11螢幕切換橫向縱向,基本上會先強制關閉程式,然後再度讀取所以會
onPause-->OnStop-->OnDestory-->OnCreat->OnStart -> OnResume



值得注意的是
onStop OnPause 程式的所有變數與物件都沒有被釋放,
都還是保持原來的這還好處理。

有時候程式裡會有兩三個Active 切換的時候會呼叫OnCreat
當 OnCreat的時候可怕的事情發生了,所有變數都回復到預設值,
雖然他並沒有被OnDestory但是他被OnCreat了,
所有的變數重新再度被定義為初始狀態,這是值得注意的。

2010年7月2日 星期五

Android 動態的增加物件以按鈕為例子

寫了一範例

這個範例 一開始有一個按鈕, 按一下新增一個按鈕
按下新的按鈕則顯示誰被按了

歡迎來我的部落格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

//原創作者 軟貓軟體 http://toimy.blogspot.com/
public class AddButtonActivity extends Activity implements OnClickListener {
LinearLayout layout;
private Button btn1;
private int CurrentButtonNumber = 0; //CurrentButtonNumber流水號 設定物件ID
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//先建立一個 面板放置所有元件
layout= new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL); //面板的擺設方式為垂直
btn1 = new Button(this);
btn1.setId(CurrentButtonNumber);
CurrentButtonNumber++;
btn1.setText("SoftCat Go Button");
btn1.setOnClickListener(this); //如果要這樣寫 需加入 implements OnClickListener 於 Activity
layout.addView(btn1, 150, 50); //addView(物件,寬度高度)
setContentView(layout); //設定畫面顯示自己的面板
}
public void onClick(View v)
{
switch(v.getId()){

case 0://增加按鈕
Button TmpBtn = new Button(v.getContext());
TmpBtn.setText("I am Button" + String.valueOf(CurrentButtonNumber) );
TmpBtn.setId(CurrentButtonNumber);
TmpBtn.setOnClickListener(this);
LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(100,50);
CurrentButtonNumber++;
layout.addView(TmpBtn, param);
break;
default://其他按鈕
alertbox("I be hit.....oh...","you hit me . I am "+ String.valueOf(v.getId()));
break;
}
}
//顯示對話方塊
protected void alertbox(String title, String mymessage)
{
new AlertDialog.Builder(this)
.setMessage(mymessage)
.setTitle(title)
.setCancelable(true)
.setNeutralButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){}
})
.show();
}
}