我的新游戏按钮和退出游戏按钮不起作用
问题描述:
我刚开始java编程,并做了一个完全正常工作的游戏。我遇到的唯一问题是我无法开始一款新游戏,并且无法退出该应用程序。 所以我做了2个按钮。一个人应该开始一个新的游戏,一个人应该退出游戏。但是当我尝试测试按钮时,我只能看到并点击它们,但没有任何反应。它与appcompat_v7有关吗?我不知道,我希望你们知道我的代码有什么问题。我的新游戏按钮和退出游戏按钮不起作用
MainActivity.java:
package com.wouter.testjk;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.wouter.testjk.R;
public class MainActivity extends Activity implements OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mTen = (Button) findViewById(R.id.ten);
mTen.setOnClickListener((OnClickListener) this);
Button mEleven = (Button) findViewById(R.id.eleven);
mEleven.setOnClickListener((OnClickListener) this);
}
private class ButtonClickListener implements View.OnClickListener
{
int location;
public ButtonClickListener(int location)
{
this.location = location;
}
public void onClick(View view)
{
switch (view.getId())
{
case R.id.ten:
startNewGame();
return;
case R.id.eleven:
MainActivity.this.finish();
return;
}
if (!mGameOver)
{
if(mBoardButtons[location].isEnabled())
{
setMove(mGame.HUMAN_PLAYER, location);
int winner = mGame.checkForWinner();
if (winner == 0)
{
mInfoTextView.setText(R.string.turn_computer);
int move = mGame.getComputerMove();
setMove(mGame.ANDROID_PLAYER, move);
winner = mGame.checkForWinner();
}
if (winner == 0)
mInfoTextView.setText(R.string.turn_human);
else if (winner == 1)
{
mInfoTextView.setText(R.string.result_tie);
mTieCounter++;
mTieCount.setText(Integer.toString(mTieCounter));
mGameOver = true;
}
else if (winner ==2)
{
mInfoTextView.setText(R.string.result_human_wins);
mHumanCounter++;
mHumanCount.setText(Integer.toString(mHumanCounter));
mGameOver = true;
}
else if (winner ==3)
{
mInfoTextView.setText(R.string.result_android_wins);
mAndroidCounter++;
mAndroidCount.setText(Integer.toString(mAndroidCounter));
mGameOver = true;
}
}
}
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
activity_main.xml中:
<TableRow
android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/ten"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/ten" />
<Button
android:id="@+id/eleven"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:text="@string/eleven" />
</TableRow>
的strings.xml:
<string name="ten">new game</string>
<string name="eleven">exit game</string>
答
的问题是,你不能有两个onClickListeners一次因为Android无法区分使用哪一个(并且一次只触发一个)。你可以做两件事之一。
1而不是设置点击监听,十和十一这一点,将其设置为新ButtonClickListener(-1)
例如mTen.setOnClickListener(new ButtonClickListener(-1));
这将允许你在执行功能您ButtonClickListener既然这么
switch (view.getId()){
case R.id.ten:
startNewGame();
return;
case R.id.eleven:
MainActivity.this.finish();
return;
}
if(!mGameOver){
// The rest of your ButtonClickListener click logic as you have it now
2.摆脱ButtonClickListener类
这可以通过向您的按钮添加一个标签来完成,该标签代表其位置不是十和十一的按钮。像
for(int i = 0; i < mBoardButtons.size(); i++){
mBoardButtons[i].setTag(i);
mBoardButtons[i].setOnClickListener(this);
}
东西,你会再使用相同的代码,如果你是使用选项1,但不是把它在ButtonClickListener的onClick方法,你把它放在你的活动的onClick()方法。然后,不要使用location
作为变量,请使用(int) view.getTag()
。
如果您需要我,我可以进入更多细节或提供更多代码,但是这应该给您一个开始。
您应该不需要将您的类强制转换为OnClickListener,因为它应该实现它。并不是说这将会/应该解决问题,只是有助于减少不必要的投射。是否有其他可能是拉焦?您还使用了其他视图/听众(如果有)? – zgc7009 2014-11-14 18:05:25
感谢您的提示,我认为它确实看起来很稳重。我将更新代码,并添加其他侦听器 – goedkoop 2014-11-14 18:08:14
我在代码中添加了另一个侦听器,是不是有可能在一个类中有2个lister? – goedkoop 2014-11-14 18:11:24