Android开发——关于OnTouch()开发过程中容易出错的地方
今天在做一个界面程序的时候发现一个问题,先不说这是什么问题,先把代码发上来大家看看能不能看出问题来!public boolean onTouch(View v, MotionEvent event) { int id = v.getId(); switch(id) { case R.id.start: if(selectedWeapCounts==4)//selectedWeapCounts是一个整数 { changeScreen = new ChangeScreen(this,new Main(),pointsNum); weapDesc.setText("Start");//weapDesc是一个TextView对象 v.setBackgroundDrawable((BitmapDrawable)getResources().getDrawable(R.drawable.selected));//设置背景 changeScreen.changeToNew(selectedWeapon);//changeScreen是我写的一个工具类,可以把一个selectWeapon传递给另外一个Activity对象 } else weapDesc.setText("请选择完“四种”武器"); break; case R.id.goback: weapDesc.setText("goback"); v.setBackgroundDrawable((BitmapDrawable)getResources().getDrawable(R.drawable.selected)); break; } return true; }
以上是重写OnTouchListener里面的一个OnTouch()方法,大家发现有什么代码部分不妥没?
我在调试的时候发现每点击一次每次会创建两个ChangeScreen对象,这就表明了这个事件响应了两次,仔细一看是这样子的,onTouch()事件会在这里响应两次,因为它响应了一次按下事件,还响应了一次弹起事件,因为点击一次是按下和弹起两次事件,所以每当满足selectedWeapCounts==4就会执行两次 changeScreen = new ChangeScreen(this,new Main(),pointsNum);这就会产生很多问题了,所以应该将代码写成下面这样:
public boolean onTouch(View v, MotionEvent event) { if(event==MotionEvent.ACTION_DOWN) { int id = v.getId(); switch(id) { case R.id.start: if(selectedWeapCounts==4)//selectedWeapCounts是一个整数 { changeScreen = new ChangeScreen(this,new Main(),pointsNum); weapDesc.setText("Start");//weapDesc是一个TextView对象 v.setBackgroundDrawable((BitmapDrawable)getResources().getDrawable(R.drawable.selected));//设置背景 changeScreen.changeToNew(selectedWeapon);//changeScreen是我写的一个工具类,可以把一个selectWeapon传递给另外一个Activity对象 } else weapDesc.setText("请选择完“四种”武器"); break; case R.id.goback: weapDesc.setText("goback"); v.setBackgroundDrawable((BitmapDrawable)getResources().getDrawable(R.drawable.selected)); break; } return true; } return false; }
大家以后开发的时候也应该注意,不要像我一样犯这样的错误!
更多Android开发学习资料
页:
[1]