Как исправить ClassNotFoundException, когда я меняю макет на невидимый

Я создал проект, который содержит макет сетки и линейный макет. Есть несколько ImageView в сетке. Сначала я сделал линейный макет невидимым, а сетчатый — видимым. Под этими ImageViews я добавляю метод onClick. Когда я нажимаю на эти изображения, метод onClick изменит макет сетки на невидимый, а линейный макет — на видимый. Таким образом, появляется линейная компоновка, а сетка исчезает. Однако каждый раз, когда он меняет макет сетки на невидимый, приложение вылетает и дает мне исключение:

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

но это нормально для изменения линейного макета на видимый.

Я уже искал Google и проверил свой код, но не могу найти никаких проблем.

Я проверил шаг за шагом и обнаружил, что сбой происходит только при изменении макета сетки на невидимый. Я также создал новый простой проект для его тестирования, но все еще имел эту проблему.

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>

Логкат:

--------- 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

Представление «Дизайн»

Код

ОБНОВИТЬ

Я перехожу по этой ссылке (android/view/view$onUnhandledKeyEventListener (ошибка onMeasure)), чтобы изменить SDK с 28 на 27 следующим образом:

compileSdkVersion 27

targetSdkVersion 27

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

Я синхронизировал Gradle и запустил его, но все равно вылетел. Мой код основной активности:

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);
                }

            }

        }
    }
}
}

Моя сборка.Грейдл:

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'
}

вы получаете эту ошибку при отладке или выпуске сборки?

Andrei Tanana 27.01.2019 12:15

Приложение вылетает или вы просто видите ошибку в журнале?

lelloman 27.01.2019 12:44

Кажется, дубликат. stackoverflow.com/questions/51931974/…, а в ответе написано "похоже, ошибка" (sdk) stackoverflow.com/questions/51305964/…

Toris 27.01.2019 13:02

@lelloman приложение разбилось на моем виртуальном устройстве.

sailorsinbad 28.01.2019 02:09

@Toris, спасибо, что сообщили мне. Я попробую это позже, если это сработает, я дам вам знать.

sailorsinbad 28.01.2019 02:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас неправильный импорт в файле MainActivity import android.widget.GridLayout;.

Вам нужно использовать import android.support.v7.widget.GridLayout, потому что вы увеличиваете версию библиотеки поддержки GridLayout в своем XML-файле.

Посмотрите на источник сбоя - Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout cannot be cast to android.widget.GridLayout

Другие вопросы по теме