1. 程式人生 > >Android中三種onClick事件的實現,與對比

Android中三種onClick事件的實現,與對比

在達內培訓,剛接觸android不久,對於button的onclick事件有點糾結。因為上了兩三天就換了個老師,兩個老師講onclick事件用了兩種不同的實現方法,我才發現可以有好幾種方式實現。

方式一:在activity的onCreate()方法中,嵌入如下程式碼:

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

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
TextView textview = (TextView)findViewById(R.id.textView1);
textview.setText("Button");
}
});

這種方式用findviewbyid通過id例項化出來這個button,然後通過設定button的listener監聽物件,並同時實現介面OnClickListenter的OnClick()方法。這種方式的程式碼量不多,但是在java中,面向物件的思想,關於耦合,模組化它達不到。程式碼堆疊在一起,比較臃腫。

方式二:讓acticity持有TextView,並且新建類Button_Listener實現介面OnClickListener,activity中的程式碼為:

public class TestOnClickActivity extends Activity {
private TextView textview;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button1);
this.textview = (TextView)findViewById(R.id.textView1);
button.setOnClickListener(new Button_Listener(this));
}

public TextView getTextview() {
return this.textview;
}
}
類Button_Listener的程式碼為:
class Button_Listener implements OnClickListener {
private TestOnClickActivity activity;

public Button_Listener(TestOnClickActivity activity) {
this.activity = activity;
}
@Override
public void onClick(View v) {
TextView textview = activity.getTextview();
textview.setText("你點選了Button");

}
}

方式二:
在方式二中,為了改正方式一的介面實現的不規範,特別重新建立了一個類:Button_Listener。
這種方式程式碼結構清晰,在為Button加入監聽方法是,只需要new Button_Listener(this)即可。但同時,我們也能夠發現,因為不屬於類TestOnClickActivity,所以類Button_Listener必須通過持有TestOnClickActivity, 將其作為成員。並且,我們需要在TestOnClickActivity 中顯示的加入TextView,並書寫getTextview()方法,才能夠實現我們的程式意圖。
雖然程式碼的模組化,解耦化得到了一定程度上的實現,但換來的結果是程式碼更多,書寫更加繁瑣。

方式三:在元件檔案activity_main.xml中,對Button加入:

    <Button
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/pause"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="52dp"
        //android:onClick="clickEvent"
        android:text="Play" />
// 過載一下onClick(View v)函式:
	@Override
	public void onClick(View v) {
		Log.d(TAG, "onClick : onClick()");

		int op = -1;
		Intent intent = new Intent("com.yang.Android.MUSIC");

		switch (v.getId()) {
		case R.id.play:
			Log.d(TAG, "onClick : play music");
			op = 1;
			break;
		case R.id.stop:
			Log.d(TAG, "onClick : stop music");
			op = 2;
			break;
		case R.id.pause:
			Log.d(TAG, "onClick : pause music");
			op = 3;
			break;
		}

		Bundle bundle = new Bundle();
		bundle.putInt("op", op);

		intent.putExtras(bundle);

		startService(intent);
	}

在方式三種,我們只需要在TestOnClickActivity 中增加一個成員函式onClick_Event(),並在元件檔案中加入對其的使用描述即可。
程式碼結構簡單,清晰,程式碼量也大大減少,並且通過xml檔案的可配置性,增長了工程的可維護性,模組化進一步增強!
 
   現在老師教的就是用第三種方法。貌似挺不錯的