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”
。它导致了撞车。