java.lang.IllegalStateException 当我尝试通过 id 查找 GridLayout 时

java.lang.IllegalStateException when I try to find GridLayout by id

我遇到了以下错误:

FATAL EXCEPTION: main
    Process: com.example.android.connectthree, PID: 12307
    java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
    at android.view.View.performClick(View.java:5697)
    at android.widget.TextView.performClick(TextView.java:10814)
    at android.view.View$PerformClick.run(View.java:22526)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7229)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:5697) 
    at android.widget.TextView.performClick(TextView.java:10814) 
    at android.view.View$PerformClick.run(View.java:22526) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7229) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
    Caused by: java.lang.ClassCastException: android.widget.GridLayout cannot be cast to android.support.v7.widget.GridLayout
    at com.example.android.connectthree.MainActivity.playAgainClicked(MainActivity.java:74)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:5697) 
    at android.widget.TextView.performClick(TextView.java:10814) 
    at android.view.View$PerformClick.run(View.java:22526) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7229) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

这是一个导致错误的方法

public void playAgainClicked(View view) {
    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.mainGrid);
    for (int i = 0; i < gridLayout.getChildCount(); i++) {
        ((ImageView) gridLayout.getChildAt(i)).setImageResource(0);
    }
}

Gist with a full java file

我已经尽我所能仔细检查了一切,仍然没有。

调试后发现正是这行代码出错

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

GridLayout中的XMLActivity是不同的。 您使用 android.widget.GridLayoutandroid.support.v7.widget.GridLayout 并尝试转换它们。