【问题标题】:Java android studio connect 3 gameJava android studio 连接 3 游戏
【发布时间】:2019-11-03 18:02:37
【问题描述】:

我正在尝试创建井字游戏,当我尝试通过按下按钮再次玩游戏时,应用程序崩溃并且不刷新表格。除此之外,工作正常。但是我找不到这次崩溃的错误所在。这是我的按钮的代码。

public void playAgain(View view) {

    gameIsActive = true;

    LinearLayout layout = (LinearLayout) findViewById(R.id.playAgainLayout);

    layout.setVisibility(View.INVISIBLE);

    activePlayer = 0;


    for (int i = 0; i < gameState.length; i++) {

        gameState[i] = 2;
    }

    GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout);

    for (int i = 0; i < gridLayout.getChildCount(); i++) {

        ((ImageView) gridLayout.getChildAt(i)).setImageResource(0);
    }

}

我的按钮属性

 <Button
            android:id="@+id/playAgain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:onClick="playAgain"
            android:text="PlayAgain" />
2019-11-03 15:43:41.534 19463-19463/com.example.connect3game E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.connect3game, PID: 19463
    java.lang.IllegalStateException: Could not find method playAgain(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton with id 'playAgainButton'
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:424)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:381)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2019-11-03 15:43:41.556 19463-19463/com.example.connect3game I/Process: Sending signal. PID: 19463 SIG: 9

【问题讨论】:

  • java 之于 javascript 什么汽车之于地毯,请不要在您的问题中添加不相关的标签,javascript 似乎与这个特定问题没有任何关系
  • android:id="@+id/playAgainButton" 的按钮是触发错误的按钮,而不是您在上面发布的那个按钮
  • 这个错误基本上告诉你,一旦你点击id为playAgainButton的按钮,它就找不到方法playAgain,可能你的活动类和布局与其内容不一致。

标签: java android


【解决方案1】:

尝试获取对Button而不是LinearLayout的引用:

所以,而不是:

LinearLayout layout = (LinearLayout) findViewById(R.id.playAgainLayout);
layout.setVisibility(View.INVISIBLE);

试试:

Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
playAgainButton.setVisibility(View.INVISIBLE);

【讨论】:

    【解决方案2】:
    public void playAgain(View view){
        Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
        TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
        //... Make the Button and Text View Visible .....
        playAgainButton.setVisibility(View.INVISIBLE);
        winnerTextView.setVisibility(View.INVISIBLE);
    
    
        GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout);
    
        for (int i = 0; i < gridLayout.getChildCount(); i++) {
            ImageView imageView = (ImageView) gridLayout.getChildAt(i);
            imageView.setImageDrawable(null);
        }
        for (int i = 0; i < gameState.length; i++) {
    
            gameState[i] = 2;
        }
        activePayer = 0 ; //... 0 :  for yellow , 1 :  for Red...
        //... create a variable to stop the game ........
        gameActive = true;
    
    
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 2013-10-05
    • 2016-07-23
    • 1970-01-01
    • 2015-08-23
    • 2016-06-11
    相关资源
    最近更新 更多