2011-05-11 122 views
0

我的主页上有三个按钮。当我尝试点击它们时会发生奇怪的事情。例如,当我点击NewGame按钮时,它会首先显示分数按钮应该显示的内容,然后如果我单击后退按钮,它将继续显示其意图的活动。随着关于按钮,我必须单击后退两次(它显示newGame活动和成绩的活动。有一个原因,这是怎么回事?Android按钮打开错误的活动

public class Sakurame extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 

    //set up click listeners for buttons 
    View HighScoreButton = findViewById(R.id.highscore_button); 
    HighScoreButton.setOnClickListener(this); 
    View newButton = findViewById(R.id.new_button); 
    newButton.setOnClickListener(this); 
    View aboutButton = findViewById(R.id.about_button); 
    aboutButton.setOnClickListener(this); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    super.onCreateOptionsMenu(menu); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()){ 
    case R.id.settings: 
     startActivity(new Intent(this, Prefs.class)); 
     return true; 
     // More items go here (if any) 
    } 
    return false; 
} 

public void onClick(View v){ 
    switch(v.getId()){ 
    case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
    case R.id.new_button: 
     Intent i2 = new Intent(this, HighScore.class); 
     startActivity(i2); 
    case R.id.highscore_button: 
     Intent i3 = new Intent(this, DisplayScores.class); 
     startActivity(i3); 
     //break; 

     // more buttons go here (if any) 
    } 
} 

回答

3

尝试的onClick方法中的每个startActivity后加入break;

编辑澄清这确保了一旦此案已经满足,switch语句被分解,而不是从上移动到下一个case语句的

case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
     break; 
    case R.id.new_button: 
     Intent i2 = new Intent(this, HighScore.class); 
     startActivity(i2); 
     break; 
    case R.id.highscore_button: 
     Intent i3 = new Intent(this, DisplayScores.class); 
     startActivity(i3); 
     break; 
+3

我想补充说明:Case语句卡斯卡德。因此,如果您在每个案例陈述后不添加中断,则后续的每个案例陈述都会运行... – 2011-05-11 23:56:40

+0

是的,对不起,我应该更清楚一点。 – keyboardP 2011-05-11 23:57:37

+0

谢谢 - 它解决了一切。我没有意识到他们级联@。@ – 2011-05-12 00:28:02