Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修复Gridlayout转换到ImageView时的错误_Java_Android_Android Imageview_Classcastexception - Fatal编程技术网

Java 修复Gridlayout转换到ImageView时的错误

Java 修复Gridlayout转换到ImageView时的错误,java,android,android-imageview,classcastexception,Java,Android,Android Imageview,Classcastexception,我将.xml文件设置为 <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:columnCount="4" android:rowCount="6" a

我将
.xml
文件设置为

<GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:columnCount="4"
    android:rowCount="6"
    android:onClick="dropIn"
    android:layout_alignParentEnd="true"
    android:id="@+id/gridLayout">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="80dp"
        android:layout_height="70dp"
        android:layout_column="0"
        tools:layout_editor_absoluteX="288dp"
        tools:layout_editor_absoluteY="180dp"
        android:layout_row="0"
        android:onClick="dropIn"
        android:contentDescription="@null"
        android:tag="1"
        app:srcCompat="@drawable/stone" />
这一切都可以正常工作,但当我单击一个已单击且现在不可见的
ImageView
时,它会导致应用程序崩溃,并显示以下消息:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.nedim.lastonestanding, PID: 9758
              java.lang.IllegalStateException: Could not execute method for android:onClick
                  at android.view.View$DeclaredOnClickListener.onClick(View.java:5374)
                  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.view.View$DeclaredOnClickListener.onClick(View.java:5369)
                  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.widget.GridLayout cannot be cast to android.widget.ImageView
                  at com.nedim.lastonestanding.MainActivity.dropIn(MainActivity.java:32)
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at android.view.View$DeclaredOnClickListener.onClick(View.java:5369) 
                  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) 
Application terminated.
据我所知,
ImageView
中的图像消失了,现在我点击的是
GridLayout
,而不是
ImageView
,这导致它崩溃,因为它不是我想要处理的东西。我还认为问题在于计数器正在使所有视图变成
ImageView
s,但我不确定如何解决这个问题。有什么想法吗?谢谢

编辑:onCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView winMessage = findViewById(R.id.winMessage);
    winMessage.setText("Let's play! It's Player " + activePlayer + "'s turn.");
}

传递给
dropIn
函数的
视图
是一个
网格布局
,您试图将其转换为
图像视图

GridLayout counter = (GridLayout) view;
但是,我看到您也在使用相同的函数来处理
ImageView
onClick
,而您不能这样做。如果你想用相同的函数来处理它们,你可以考虑这样做。
public void dropIn(View view) {
    if(view.getId() == R.id.gridLayout) {
        // Handle action for GridLayout click
    } else if(view.getId() == R.id.imageView1) {
        // Handle the actions for ImageView click
    }
}
我个人认为,你把
onClick
放在
GridLayout
中是错误的。因此,只需从
GridLayout
xml中省略
onClick
属性

<GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:columnCount="4"
    android:rowCount="6"
    <!-- android:onClick="dropIn" -->
    android:layout_alignParentEnd="true"
    android:id="@+id/gridLayout">

android:layout\u alignParentEnd=“true”
android:id=“@+id/gridLayout”

传递到
dropIn
函数的
视图
是一个
网格布局
,您试图将其转换为
图像视图

GridLayout counter = (GridLayout) view;
但是,我看到您也在使用相同的函数来处理
ImageView
onClick
,而您不能这样做。如果你想用相同的函数来处理它们,你可以考虑这样做。
public void dropIn(View view) {
    if(view.getId() == R.id.gridLayout) {
        // Handle action for GridLayout click
    } else if(view.getId() == R.id.imageView1) {
        // Handle the actions for ImageView click
    }
}
我个人认为,你把
onClick
放在
GridLayout
中是错误的。因此,只需从
GridLayout
xml中省略
onClick
属性

<GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:columnCount="4"
    android:rowCount="6"
    <!-- android:onClick="dropIn" -->
    android:layout_alignParentEnd="true"
    android:id="@+id/gridLayout">

android:layout\u alignParentEnd=“true”
android:id=“@+id/gridLayout”

对于
GridLayout
ImageView
,您拥有相同的属性
android:onClick=“dropIn”
。第一个导致行
ImageView counter=(ImageView)视图中的
ClassCastException

对于
GridLayout
ImageView
,您拥有相同的属性
android:onClick=“dropIn”
。第一个导致行
ImageView counter=(ImageView)视图中的
ClassCastException

Onik,你是什么意思?它不在任何地方调用,因为它位于
公共类MainActivity扩展AppCompatActivity
中。另外,
dropIn(View视图)
是ImageView的
onClick
,但在Java代码中没有调用它。应该吗?明白了。然后从
GridLayout
xml属性中删除
android:onClick=“dropIn”
。它导致了坠机。奥尼克,你什么意思?它不在任何地方调用,因为它位于
公共类MainActivity扩展AppCompatActivity
中。另外,
dropIn(View视图)
是ImageView的
onClick
,但在Java代码中没有调用它。应该吗?明白了。然后从
GridLayout
xml属性中删除
android:onClick=“dropIn”
。它导致了撞车。