我的newgame按钮和exitgame按钮不起作用

时间:2014-11-14 18:02:00

标签: java android eclipse

我刚开始进行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>

1 个答案:

答案 0 :(得分:1)

问题是你不能同时拥有两个onClickListener,因为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方法中,而是将其放在Activity的onClick()方法中。然后,不要使用location作为变量,而是使用(int) view.getTag()

如果您需要,我可以详细介绍或提供更多代码,但这应该可以帮助您。