首先,参考博客:http://www.runoob.com/w3cnote/android-tutorial-listen-event-handle.html
参考书目:Android移动应用基础教程,传智播客高教产品研发部编著
设计出一个精美的界面之后,要开始实现你所期待的功能,不然再精美的界面也只是徒有其表啊。
比如,你在界面上画了一个按钮,希望点击按钮之后出现一个提示“你点击了按钮”,那么实现这个按钮的功能过程就是今天我要说的内容啦!
引用http://www.runoob.com/w3cnote/android-tutorial-listen-event-handle.html这位大神的图来说明:
事件监听机制是一种委派式的事件处理机制,事件源(组件)事件处理委托给事件监听器,当事件源发生指定事件时,就通知指定事件监听器,执行相应的操作
********
a)用匿名内部类实现,比较适用于按钮较少的情况。
核心代码:
public class MainActivity extends Activity {
private Button btnshow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnshow = (Button) findViewById(R.id.btnshow);
btnshow.setOnClickListener(new OnClickListener() {
//重写点击事件的处理方法onClick()
@Override
public void onClick(View v) {
//显示Toast信息
Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();
}
});
}
}
b)使用内部类实现:可以在该类中进行复用,可直接访问外部类的所有界面组件
核心代码:
public class MainActivity extends Activity {
private Button btnshow1;
private Button btnshow2;
private Button btnshow3;
private Button btnshow4;
private Button btnshow5;
private Button btnshow6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnshow1 = (Button) findViewById(R.id.button1);
btnshow2 = (Button) findViewById(R.id.button2);
btnshow3 = (Button) findViewById(R.id.button3);
btnshow4 = (Button) findViewById(R.id.button4);
btnshow5 = (Button) findViewById(R.id.button5);
btnshow6 = (Button) findViewById(R.id.button6);
//直接new一个内部类对象作为参数
btnshow1.setOnClickListener(new BtnClickListener());
btnshow2.setOnClickListener(new BtnClickListener());
btnshow3.setOnClickListener(new BtnClickListener());
btnshow4.setOnClickListener(new BtnClickListener());
btnshow5.setOnClickListener(new BtnClickListener());
btnshow6.setOnClickListener(new BtnClickListener());
}
//定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法
class BtnClickListener implements View.OnClickListener
{
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
case R.id.button2:
case R.id.button3:
case R.id.button4:
case R.id.button5:
Toast.makeText(getApplicationContext(), "没有中奖噢", Toast.LENGTH_SHORT).show();
break;
case R.id.button6:
Toast.makeText(getApplicationContext(), "Bravo,quelle chance !", Toast.LENGTH_SHORT).show();
break;
}
}
}
}
c)用了内部类之后,logically,应该用外部类啦:外部类不能直接访问用户界面类中的组件,要通过构造方法将组件传入使用;这样导致的结果就是代码不够简洁!
TextviewClass.java:
public class TextviewClss implements View.OnClickListener {
private TextView txtshow;
public TextviewClss(TextView txt)
{
txtshow=txt;
}
@Override
public void onClick(View v) {
txtshow.setText("您点了按钮哦");
}
}
OuterListener.java:
public class MainActivity extends Activity {
private Button btnshow;
private TextView txtshow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnshow =(Button) findViewById(R.id.button);
txtshow=(TextView) findViewById(R.id.textView);
btnshow.setOnClickListener(new TextviewClss(txtshow));
}
}
d)直接使用Activity作为事件监听器:只需要让Activity类实现XxxListener事件监听接口,在Activity中定义重写对应的事件处理器方法
public class MainActivity extends Activity implements View.OnClickListener{
private Button btnshow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnshow=(Button)findViewById(R.id.button);
btnshow.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "点击了按钮", Toast.LENGTH_SHORT).show();
}
}
e)直接绑定到标签:就是直接在xml布局文件中对应得Activity中定义一个事件处理方法
方法就是在布局文件中添加一个属性:onclick = “myClick”
核心代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//自定义一个方法,传入一个view组件作为参数
public void myClick(View source)
{
Toast.makeText(getApplicationContext(), "按钮被点击了", Toast.LENGTH_SHORT).show();
}
}
在activity_main.xml中添加:
android:onClick=”myClick”
**4、终于写完了,虽然是差不多对照博主的代码敲了一遍,但是收获很多。借此告诉大家,动手敲代码对理解程序帮助很大,结合理论看效果更佳。