2014-11-14 131 views
0

我剛開始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> 
+0

您應該不需要將您的類強制轉換爲OnClickListener,因爲它應該實現它。並不是說這將會/應該解決問題,只是有助於減少不必要的投射。是否有其他可能是拉焦?您還使用了其他視圖/聽衆(如果有)? – zgc7009 2014-11-14 18:05:25

+0

感謝您的提示,我認爲它確實看起來很穩重。我將更新代碼,並添加其他偵聽器 – goedkoop 2014-11-14 18:08:14

+0

我在代碼中添加了另一個偵聽器,是不是有可能在一個類中有2個lister? – goedkoop 2014-11-14 18:11:24

回答

1

的問題是,你不能有兩個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()

如果您需要我,我可以進入更多細節或提供更多代碼,但是這應該給您一個開始。

+0

謝謝,我appriciate你幫助我。我會嘗試這個,如果我不會成功,我會回來 – goedkoop 2014-11-14 18:33:46

+0

最後我可以這樣做,因爲我有一些錯誤之前,我可以......但它仍然以某種方式工作,我嘗試了第一種方法,我會更新在我的帖子上面 – goedkoop 2014-11-14 21:31:23

+0

@goedkoop對不起,我花了一段時間纔回來,看看選項1下面的行。你忘記改變onClickListener()類型。 – zgc7009 2014-11-15 22:03:55