2010年10月11日 星期一

撰寫Android程式常碰到的問題(一)

在設計Android程式時,有時會碰到"The application Hello Application has stopped unexpectedly. Please try again.",如圖所示。

其可能的原因之一是物件本身不存在,例如下列程式中的button物件。

public class HelloActivity extends Activity {
TextView tv;
Button button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.Text01);

button.setOnClickListener(new OnClickListener(){

public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("Hello");
}

});

}
}

在上面程式中,定義一個Button的物件,命名為button,但宣告只是建立物件的指標,而非該物件已經是真實地存在,您必須使用findViewById()函式來連繫存在資源檔內的按鈕物件才行。

button = (Button) findViewById(R.id.Button01);

6 則留言:

  1. 老師請問一下
    程式裡面有一段onClick(View v)
    那個View是什麼呢?
    View v 給onClick 又是做什麼的呢
    找了很多資料似乎都沒有說的很清楚

    回覆刪除
  2. View是視域物件,就是您在畫面上可以看到的物件,如按鈕、文字框等。至於onClick為何要給View物件,是用來告訴您按鈕動作發生在那個物件上,您不妨試著使用v.setText("Click");指令,您就會瞭解。

    回覆刪除
  3. 老師,v是視域物件我了解了
    還有疑問就是
    但如果有兩個按鍵
    view v似乎沒明確指定我在使用哪個
    程式也能了解我是在按哪個按鍵
    不曉得他是如何判斷的

    回覆刪除
  4. 您可以使用getId ()函式,一般會配合switch指令來使用,每個視域物件若要經由程式控制都要指定ID, 如本篇文章中的R.id.Button01就代表按鈕物件的ID。

    回覆刪除
  5. R.id.Button01已經指定Button01 給button了
    再用View v告訴您按鈕動作發生在那個物件上不是多此一舉?

    回覆刪除
  6. 您的想法很好,但因為您目前只有到一個按鈕,如果在畫面上有許多按鈕,那就會很有用。

    回覆刪除