学习过一些Button控件的使用方法,对OnClickListener事件的定义方式有所不同,下面来总结一下该事件的三种使用方式:在xml文件中定义事件;在Actitivy中实例化一个事件;Activity实现该事件的接口。三种Button点击事件的实现,各有利弊,读者可以根据情况选择合理的使用方式。
1. 在xml文件中定义事件,这种方式适用于指定的Button控件,代码比较简洁。
xml文件:
<Button android:text="按钮"
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="buttonClick"
</Button>
Activity类:
public void buttonClick(View v){
Intent intent = new Intent(mainActivity.this, otherActivity.class);
intent.putExtra("string", "info");
startActivity(intent);
}
2. 在Actitivy中实例化一个事件,该方法如果和第一种方法同时使用的话,则优先执行第一种方法。
xml文件:
<Button android:text="按钮"
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
Activity类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(mainActivity.this, otherActivity.class);
intent.putExtra("string", "info");
startActivity(intent);
}
});
}
这种方式使用起来比较方便,但是效率很低,尤其是写在ListView的适配器的getView方法中,需要创建多个事件对象,代码臃肿,浪费资源。解决办法如下。
xml文件:
<Button android:text="按钮"
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
Activity类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(listener);
}
OnClickListener listener=new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(mainActivity.this, otherActivity.class);
intent.putExtra("string", "info");
startActivity(intent);
}
});
需要有多个Button的点击事件的时候代码如下。
xml文件:
<Button android:text="按钮1"
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
<Button android:text="按钮2"
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
Activity类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(listener);
}
OnClickListener listener= new OnClickListener(){
switch (v.getId()) {
case R.id.button1:
Intent intent = new Intent(mainActivity.this, otherActivity.class);
intent.putExtra("string1", "info1");
startActivity(intent);
break;
case R.id.button2:
Intent intent = new Intent(mainActivity.this, otherActivity1.class);
intent.putExtra("string2", "info2");
startActivity(intent);
break;
}
}
};
3.Activity实现该事件的接口,这是比较常用的一种使用方式,能够使同一个Activity使用一个相同点击事件,完成相应的操作。
xml文件:
<Button android:text="按钮1"
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
<Button android:text="按钮2"
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</Button>
Activity类:
public class mainActivity extends Activity implements OnClickListener{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Intent intent = new Intent(mainActivity.this, otherActivity.class);
intent.putExtra("string1", "info1");
startActivity(intent);
break;
case R.id.button2:
Intent intent = new Intent(mainActivity.this, otherActivity1.class);
intent.putExtra("string2", "info2");
startActivity(intent);
break;
}
}
}