今天在做一个界面程序的时候发现一个问题,先不说这是什么问题,先把代码发上来大家看看能不能看出问题来!
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开发学习资料