hoyee1223 发表于 2013-1-14 18:31:41

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]
查看完整版本: Android开发——关于OnTouch()开发过程中容易出错的地方