android中的匿名内部类

public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

setContentView(R.layout.content_layout_id);

final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
}
}

先贴一段代码,button设置监听状态。其中setOnClickListener()函数是button类从android.view.View中继承下来的,

void setOnClickListener(View.OnClickListener l)

Register a callback to be invoked when
this view is clicked.

参数为View.onClickListener接口,定义如下:

public static interface
View.OnClickListener

android.view.View.OnClickListener

Class Overview

Interface definition for a callback to be invoked when a view is clicked.

Summary

Public Methods

abstract void onClick(View v)
Called when a view has been clicked.

所以需要实现接口中未实现的成员函数public void onClick(View v)。

除了上面的这种实现方式外,也可以分开来进行实现。

//Listen for button clicks
private void setListeners() {
button_calc.setOnClickListener(calcBMI);
}

private OnClickListener calcBMI = new OnClickListener()
{
public void onClick(View v)
{

//The second one
Intent intent = new Intent();
intent.setClass(BMI2.
this, Report.class);
Bundle bundle
= new Bundle();
bundle.putString(
"KEY_HEIGHT", field_height.getText().toString());
bundle.putString(
"KEY_WEIGHT", field_weight.getText().toString());
intent.putExtras(bundle);
startActivity(intent);

}
};

以上两种方法等价。

同理对于android中常用的Handler类也是如此。

public class Handler

extends Object
java.lang.Object
   ↳ android.os.Handler

Handler myhandler = new Handler()//??ntg876 这种写法的含义
{
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
WVGT.setFlag(
false);//在onclickListen的时候,程序退出时,必须先将正在运行的WelcomeViewGoThread退出
//否则一旦welcomeView被置null,WelcomeViewGoThread又在修改welcomeView的数据,就会pointer出错。
welcomeView.setFlag(false);
if(welcomeView != null){
welcomeView
= null;
}
initAndToMenuView();
break;
case 2:
MVGT.setFlag(
false);
menuView.setFlag(
false);
if(menuView != null){
menuView
= null;
}
initAndToGameView();
break;
case 3:
break;
}
}

};

对于发送message端来说,下面是menuView的触摸屏事件,当点击时,发送“2”,进入gameView。

public boolean onTouchEvent(MotionEvent event) {//重写onTouchEvent方法
if(event.getAction()== MotionEvent.ACTION_UP){//判断事件类型
int x = (int)event.getX(); //获得点击处的X坐标
int y = (int)event.getY(); //获得点击处的Y坐标
if(x>= 60 && x<=260 && y>=60 && y<=140)
{
pushBoxActivity.myhandler.sendEmptyMessage(
2);
}
}

posted @ 2011-06-26 10:17  lxmanutd  阅读(704)  评论(0编辑  收藏  举报