【发布时间】:2019-03-22 13:43:04
【问题描述】:
我一直试图隐藏 GridLayout 3x3 板的所有图像视图。我尝试使用循环遍历布局的所有子元素和 imageView.setImageDrawable(null);
注意:以下代码已放在 playAgain(View view) 按钮方法中。
public void playAgain(View view){
Button playAgainButton = (Button) findViewById(R.id.playAgainButtonID);
TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
playAgainButton.setVisibility(View.INVISIBLE);
winnerTextView.animate().translationYBy(-100);
GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout);
for(int i=0; i<gridLayout.getChildCount(); i++){
ImageView imageView = (ImageView) gridLayout.getChildAt(i);
imageView.setBackgroundResource(0);
}
after pressing the button the app shows this error
这是来自 logcat 的日志:
E/AndroidRuntime: 致命异常: main 进程:com.rootcomp.bills.joincoin,PID:10140 java.lang.IllegalStateException:无法执行 android:onClick 的方法 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 引起:java.lang.ClassCastException: android.support.v7.widget.GridLayout 无法转换为 android.widget.GridLayout 在 com.rootcomp.bills.joincoin.MainActivity.playAgain(MainActivity.java:99) 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 2018-10-18 01:48:21.514 1740-5247/system_process W/ActivityManager: 强制完成活动 com.rootcomp.bills.joincoin/.MainActivity
【问题讨论】:
-
如果没有其他方法,你可以写
imageView.setVisibility(View.INVISIBLE);这样你甚至可以跳过演员表ImageView:gridLayout.getChildAt(i).setVisibility(View.INVISIBLE); -
我认为问题在于我用来遍历 GridLayout 的所有子项的 for 循环。当我注释掉循环行并在尝试使用循环时出现崩溃时,它工作正常。刚刚使用 imageView.setVisibility(View.INVISIBLE);可悲的是仍然是同样的错误。
-
然后在Logcat中查找crash log。它说什么?
-
for(int i=0; i<gridlayout.getchildcount i gridlayout.getchildat> 还是不行 :(.</gridlayout.getchildcount> -
嗯...这不是我要问的。你使用 Android Studio 吗?