按钮绑定监听器的几种方式:
A:采用内部类的形式
1.自己创建一个内部类,实现OnClickListener接口,重写里面的onClick()方法.
2.在使用的地方创建一个内部类对象.
3.用button对象通过setOnClickListener(监听器对象)方法绑定监听器对象.
public class MainActivity extends Activity{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
MyListenner listenner = new MyListenner();
//按钮绑定监听器
button.setOnClickListener(listenner);
}
//按钮的监听器是一个接口,所有不能直接创建对象
class MyListenner implements OnClickListener{
//当控件(在这里就是按钮)被点击当时候,会调用的方法
//v:事件源(谁触发了点击这个事件,谁就是事件源) 指代:当前被点击的按钮
@Override
public void onClick(View v) {
//TODO 做点击按钮要做的事
button.setText("点击了按钮"+new Date());
}
}
}
B.用当前类实现接口
1.用当前activity实现OnClickListener接口,重写里面的onClick()方法.
2.用button对象通过setOnClickListener(this)绑定监听器对象(当前的类对象).
public class MainActivity extends Activity implements View.OnClickListener{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
button2.setText("用当前的类实现监听器"+new Date());
}
}
C.采用匿名内部类的方式
1.用button对象通过setOnClickListener(创建接口的匿名内部类对象)绑定静听器对象.
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@override
public void onClick(View v) {
button.setText("用匿名内部类的方式" + new Date());
}
});
}
D.以属性的形式
1.在布局文件中,button的属性里定义onClick=”方法名”
2.在代码中声明格式是固定的:
public void 方法名(View v) {
方法体;
}
布局文件中写法:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
android:onClick="btnOnclick"
/>
代码:
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
}
//格式是固定的
public void btnOnClick(View v) {
button.setText("以属性的方式改变内容" + new Date());
}
}
多个按钮同时绑定一个监听器:
A.采用内部类的形式:绑定监听器的时候,传同一个对象.
B.用当前类实现接口:绑定监听器的时候都传 this.
C.以属性的形式:写属性的时候onClick的值都写同一个方法名
采用内部类的形式:
public class SecondActivity extends Activity{
private Button btnChangColor,btnChangeText;
private LinearLayout layout;
private Random random;//获取随机数的类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btnChangColor = (Button) findViewById(R.id.btnChangColor);
btnChangeText = (Button) findViewById(R.id.btnChangeText);
layout = (LinearLayout) findViewById(R.id.layout);
random = new Random();
CommonLis listener = new CommonLis();
btnChangColor.setOnClickListener(listener);
btnChangeText.setOnClickListener(listener);
}
class CommonLis implements OnClickListener{
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
//改变背景颜色的按钮
case R.id.btnChangColor:
//ff 255
int red = random.nextInt(256);//[0,255]
int green = random.nextInt(256);
int blue = random.nextInt(256);
//设置背景颜色
layout.setBackgroundColor(Color.rgb(red, green,blue));
break;
//改变文本信息的按钮
case R.id.btnChangeText:
btnChangeText.setText("改变文本信息"+new Date());
//Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件
Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show();
break;
default:
break;
}
}
}
}
用当前类实现接口的形式:
public class SecondActivity extends Activity implements OnClickListener{
private Button btnChangColor,btnChangeText;
private LinearLayout layout;
private Random random = new Random();//获取随机数的类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btnChangColor = (Button) findViewById(R.id.btnChangColor);
btnChangeText = (Button) findViewById(R.id.btnChangeText);
layout = (LinearLayout) findViewById(R.id.layout);
btnChangColor.setOnClickListener(this);
btnChangeText.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
//改变背景颜色的按钮
case R.id.btnChangColor:
//ff 255
int red = random.nextInt(256);//[0,255]
int green = random.nextInt(256);
int blue = random.nextInt(256);
//设置背景颜色
layout.setBackgroundColor(Color.rgb(red, green,blue));
break;
//改变文本信息的按钮
case R.id.btnChangeText:
btnChangeText.setText("改变文本信息"+new Date());
//Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件
Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show();
break;
default:
break;
}
}
}
以属性的方式:
public class SecondActivity extends Activity implements OnClickListener{
private Button btnChangColor,btnChangeText;
private LinearLayout layout;
private Random random = new Random();//获取随机数的类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btnChangColor = (Button) findViewById(R.id.btnChangColor);
btnChangeText = (Button) findViewById(R.id.btnChangeText);
layout = (LinearLayout) findViewById(R.id.layout);
}
public void btnSure(View v) {
int id = v.getId();
switch (id) {
//改变背景颜色的按钮
case R.id.btnChangColor:
//ff 255
int red = random.nextInt(256);//[0,255]
int green = random.nextInt(256);
int blue = random.nextInt(256);
//设置背景颜色
layout.setBackgroundColor(Color.rgb(red, green,blue));
break;
//改变文本信息的按钮
case R.id.btnChangeText:
btnChangeText.setText("改变文本信息"+new Date());
//Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件
Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show();
break;
default:
break;
}
}
}