Android中三種onClick事件的實現,與對比
阿新 • • 發佈:2019-01-28
在達內培訓,剛接觸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檔案的可配置性,增長了工程的可維護性,模組化進一步增強!
現在老師教的就是用第三種方法。貌似挺不錯的