方式一:在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()方法,才能夠實現我們的程序意圖。
雖然代碼的模塊化,解耦化得到了一定程度上的實現,但換來的結果是代碼更多,書寫更加繁瑣
方式三:在組件文件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文件的可配置性,增長了工程的可維護性,模塊化進一步增強!
