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
所以需要实现接口中未实现的成员函数public void
//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);
}
}