Android開發中Button的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.");
}
});


這個方式中,程序首先根據Button的ID實例化Button,然后在Button上加入listener監聽對象,並同時實現接口OnClickListener的onClick()方法。
這種方式的代碼量不是很多,但是有一個弊病:違背了java語言中,面向對象思想中關於解耦合,模塊化的思想。 代碼將接口的實現全部堆疊在一對小小的括號內,代碼較為臃腫,並且很讓人費解。

 


方式二:讓acticity持有TextView,並且新建類Button_Listener實現接口OnClickListener,activity中的代碼為:
public class TestOnClickActivity extends Activity {
private TextView textview;
/** Called when the activity is first created. */
@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()方法,才能夠實現我們的程序意圖。
雖然代碼的模塊化,解耦化得到了一定程度上的實現,但換來的結果是代碼更多,書寫更加繁瑣。

 

方式三:在組件文件main.xml中,對Button加入:
android:onClick="onClick_Event"

在activity中加入以下代碼:
public void onClick_Event(View view) {
TextView textview = (TextView)findViewById(R.id.textView1);
textview.setText("你點擊了Button");
}

在方式三種,我們只需要在TestOnClickActivity 中增加一個成員函數onClick_Event(),並在組件文件中加入對其的使用描述即可。
代碼結構簡單,清晰,代碼量也大大減少,並且通過xml文件的可配置性,增長了工程的可維護性,模塊化進一步增強! 這也是我最為推崇的一種方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM