1

I created a project that contains a grid layout and a linear layout. There are some ImageView in grid layout. At first, I set the linear layout to invisible and set the grid layout visible. Under those ImageViews, I add onClick method. When I click those images, the onClick method will change the grid layout to invisible and linear layout to visible. So the linear layout comes out and grid layout disappear. However, every time it changes the grid layout to invisible the App crashes and give me an exception:

ClassNotFoundException: Didn't find class 
"android.view.View$OnUnhandledKeyEventListener"

but it's fine for changing linear layout to visible.

I already searched Google and checked my code but I cannot find any problem..

I checked step by step and I found that the crash comes out only for change the grid layout to invisible. I also created a new simple project for testing it but still had this problem.

GridLayout mainLayout = (GridLayout)findViewById(R.id.gridLayout);
mainLayout.setVisibility(View.INVISIBLE);
LinearLayout winnerLayout = 
(LinearLayout)findViewById(R.id.winnerLayout);
winnerLayout.setVisibility(View.VISIBLE);

XML:

?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<android.support.v7.widget.GridLayout
    android:id="@+id/gridLayout"
    android:layout_width="0dp"
    android:layout_height="413dp"
    android:background="@drawable/board"
    android:visibility="visible"
    app:columnCount="3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintDimensionRatio="w,1:1"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:rowCount="3"
   >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginTop="0dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="0"
        app:layout_column="0"
        app:layout_row="0"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="7dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="1"
        app:layout_column="1"
        app:layout_row="0"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="4dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="2"
        app:layout_column="2"
        app:layout_row="0"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginTop="20dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="3"
        app:layout_column="0"
        app:layout_row="1"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="7dp"
        android:layout_marginTop="20dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="4"
        app:layout_column="1"
        app:layout_row="1"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="20dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="5"
        app:layout_column="2"
        app:layout_row="1"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginTop="15dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="6"
        app:layout_column="0"
        app:layout_row="2"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="7dp"
        android:layout_marginTop="15dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="7"
        app:layout_column="1"
        app:layout_row="2"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

    <ImageView
        android:id="@+id/imageView9"
        android:layout_width="134dp"
        android:layout_height="125dp"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="15dp"
        android:onClick="dropIn"
        android:scaleType="fitCenter"
        android:tag="8"
        app:layout_column="2"
        app:layout_row="2"
        tools:layout_editor_absoluteX="180dp"
        tools:layout_editor_absoluteY="162dp" />

</android.support.v7.widget.GridLayout>

<LinearLayout
    android:id="@+id/winnerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:visibility="invisible"
    >

    <TextView
        android:id="@+id/winnerText"
        android:layout_width="310dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:fontFamily="@font/finger_paint"
        android:gravity="center"
        android:text="Yellow Won"
        android:textAlignment="center"
        android:textColor="@android:color/holo_red_light"
        android:textSize="70sp"
        android:typeface="monospace"
        tools:layout_editor_absoluteY="222dp" />


</LinearLayout>
</android.support.constraint.ConstraintLayout>

Logcat:

--------- beginning of crash
2019-01-28 12:05:15.704 5002-5002/sailorsinbad.com.udemy5_clock_rotation 
E/AndroidRuntime: FATAL EXCEPTION: main
Process: sailorsinbad.com.udemy5_clock_rotation, PID: 5002
java.lang.IllegalStateException: Could not execute method for 
android:onClick
    at 
android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick( 
AppCompatViewInflater.java:389)
    at android.view.View.performClick(View.java:6294)
    at android.view.View$PerformClick.run(View.java:24770)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at 
 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java: 
 438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at 
android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick( 
AppCompatViewInflater.java:384)
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
 Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout cannot be cast to android.widget.GridLayout
    at sailorsinbad.com.udemy5_clock_rotation.MainActivity.resetAndNextGame(MainActivity.java:36)
    at sailorsinbad.com.udemy5_clock_rotation.MainActivity.dropIn(MainActivity.java:72)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 


--------- beginning of system

Design View

Code

UPDATE

I follow this link (android/view/view$onUnhandledKeyEventListener (onMeasure error)) to change the sdk from 28 to 27 like this:

compileSdkVersion 27

targetSdkVersion 27

implementation 'com.android.support:appcompat-v7:27.1.1'

I synced Gradle and run it but still crashed. My MainActivity CODE:

package sailorsinbad.com.udemy5_clock_rotation;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {
boolean winningState = false;
int isRed = 1;
//red is 1; yellow is 2
int[] gameState = {0,0,0,0,0,0,0,0,0};
int[][] winningCondition = {
        {0,1,2}, {3,4,5}, {6,7,8},
        {0,3,6}, {1,4,7}, {2,5,8},
        {0,4,8}, {2,4,6}
    };
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

public void animationDropIn(View drop) {
    drop.setTranslationY(-1000f);
    drop.animate().translationYBy(1000f).rotation(720).setDuration(250);
}
public void resetAndNextGame(String winner){
    //switch to winner layout
    GridLayout mainLayout = (GridLayout)findViewById(R.id.gridLayout);
    mainLayout.setVisibility(View.INVISIBLE);
    LinearLayout winnerLayout = 
    (LinearLayout)findViewById(R.id.winnerLayout);
    winnerLayout.setVisibility(View.VISIBLE);
    TextView text = (TextView)findViewById(R.id.winnerText);
    text.setText(winner);
}
public void dropIn(View view) {
    //catch current rectangle building block area (View)
    ImageView drop = (ImageView) view;
    //drop-in animation
    //2 sides cross drop in, prevent repeat drop, record game state
    int tagNum= Integer.parseInt(drop.getTag().toString());
    //System.out.println(tagNum);
    if (!winningState) {
        if (isRed == 1 && gameState[tagNum] == 0) {
            drop.setImageResource(R.drawable.red);
            gameState[tagNum] = isRed;
            animationDropIn(drop);
            isRed = 2;

        } else if (isRed == 2 && gameState[tagNum] == 0) {
            drop.setImageResource(R.drawable.yellow);
            gameState[tagNum] = isRed;
            animationDropIn(drop);
            isRed = 1;
        }
        // System.out.println(gameState[tagNum]);
        //game checking winning condition
        for (int[] winniningPosition : winningCondition) {
            if (gameState[winniningPosition[0]] == 
                gameState[winniningPosition[1]]
                    && gameState[winniningPosition[1]] == 
                gameState[winniningPosition[2]] && 
                gameState[winniningPosition[0]] != 0) {
                if (isRed == 2) {
                    //reversed before
                    String win = "Red Win";
                    winningState = true;
                    resetAndNextGame(win);
                } else {
                    String win = "Yellow Win";
                    winningState = true;
                     resetAndNextGame(win);
                }
            } else {
                boolean isGameOver = true;
                for (int counter : gameState) {
                    if (counter == 0) {
                        isGameOver = false;
                    }
                }
                if (isGameOver) {
                    String win = "Draw";
                    winningState = true;
                     resetAndNextGame(win);
                }

            }

        }
    }
}
}

My build.Gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 27
defaultConfig {
    applicationId "sailorsinbad.com.udemy5_clock_rotation"
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.pro'
    }
}
}

dependencies {
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso- 
core:3.0.2'
implementation 'com.android.support:gridlayout-v7:27.1.1'
}

1 Answers1

0

You have the wrong import in your MainActivity import android.widget.GridLayout;.

You need to use import android.support.v7.widget.GridLayout because you are inflating support library version of GridLayout in your xml file.

Look at source of crash - Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout cannot be cast to android.widget.GridLayout

Vishal Arora
  • 2,524
  • 2
  • 11
  • 14