2012-02-14 58 views
0

我正在开发针对android的琐事游戏。生成一个随机数来随机选择一个问题。当我得到我的嵌套开关语句eclipse提供了一个错误“v无法解析”从这个部分: switch(v.getId()) { case R.id.button0: Toast.makeText(BeginGame.this, "success",Toast.LENGTH_SHORT).show();
break; default: Toast.makeText(BeginGame.this,"Fail",Toast.LENGTH_SHORT).show();
break;
Android的onTouchListener不能从嵌套的switch语句中工作

有什么建议吗?

'公共类BeginGame延伸活动{

public OnTouchListener nextListener = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      Log.d("base", "next"); 
     } 
     return false; 
     } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main2); 

     int[] questionArray = {-1,-1,-1,-1,-1,-1,-1}; 
     Random questionNumberGenerated = new Random(); 
     int num; 
     boolean duplicate = false; 


     do{ 
      num = questionNumberGenerated.nextInt(7); 
       for (int i=0; i<questionArray.length; i++){ 

        if (num == questionArray[i]){ 
         duplicate=true; 
         } 
        } 
       }while (duplicate); 

     if (duplicate=false){ 
      for (int j=0; j<questionArray.length; j++) 
       questionArray[j]=num; 
     } 






     switch (num) { 
     case 0:    
      Button button0 = (Button) findViewById(R.id.button0); 
      button0.setOnTouchListener(nextListener); 
      Button button1 = (Button) findViewById(R.id.button1); 
      button1.setOnTouchListener(nextListener); 
      Button button2 = (Button) findViewById(R.id.button2); 
      button2.setOnTouchListener(nextListener); 
      Button button3 = (Button) findViewById(R.id.button3); 
      button3.setOnTouchListener(nextListener); 
      TextView text = (TextView) findViewById(R.id.TextView01); 
      text.setText("press alabama:"); 
      button0.setText("Alabama"); 
      button1.setText("Mississippi"); 
      button2.setText("Philadelphia"); 
      button3.setText("Virginia");  
       switch(v.getId()) { 
       case R.id.button0: 
        Toast.makeText(BeginGame.this, "success", Toast.LENGTH_SHORT).show(); 
        break; 
       default: 
        Toast.makeText(BeginGame.this, "Fail", Toast.LENGTH_SHORT).show();   
        break; 
      } 
     case 1: 
      text.setText("press green"); 
      button0.setText("zsx"); 
      button1.setText("zczcz"); 
      button2.setText("zczc"); 
      button3.setText("green"); 
     case 2: 
      text.setText("press blue"); 
      button0.setText("www"); 
      button1.setText("aaa"); 
      button2.setText("dddd"); 
      button3.setText("blue"); 
     case 3: 
      text.setText("press red"); 
      button0.setText("111"); 
      button1.setText("222"); 
      button2.setText("3333"); 
      button3.setText("red"); 
     } 
    } 

}

`

+0

要么你没有提供完整的src代码,或者你没有在代码中声明v。 – jeet 2012-02-14 05:22:36

+0

你能告诉我如何声明“v”吗? – user465001 2012-02-14 05:39:27

+0

回到刚刚复制的代码,然后阅读它以明白简单地从? – 2012-02-14 06:56:12

回答

1

你想做什么?该方法中没有v的定义。 如果您想在按钮上执行某些任务,请将该开关案例移至像以下这样的onTouch方法。

public boolean onTouch(View v, MotionEvent event) { 

     switch(v.getId()) { 
      case R.id.button0: 
       Toast.makeText(BeginGame.this, "success", Toast.LENGTH_SHORT).show(); 
       break; 
      default: 
       Toast.makeText(BeginGame.this, "Fail", Toast.LENGTH_SHORT).show();   
       break; 
     } 

    } 
+0

谢谢拉吉。我明白你指出的。当随机数出现时,它将对应于switch语句外部的情况。该案例将设置要在屏幕上显示的文本和按钮。这种情况下的内部开关语句是确定被触摸的答案是否正确。该程序没有完成 - 我只是卡在v.getId。 – user465001 2012-02-14 05:27:35

+0

我也试过你的例子Raj,但它不适合我。 – user465001 2012-02-14 07:45:39