我的问题如下。我在网格布局中有3个线性布局。
在每个线性布局中有3个ImageView,总共9个。请参阅下面的xml:
<GridLayout
android:id="@+id/gridLayout"
android:layout_width="0dp"
android:layout_height="350dp"
android:layout_marginTop="30dp"
android:layout_weight="1"
android:alignmentMode="alignMargins"
android:background="@drawable/board"
android:columnCount="3"
android:columnOrderPreserved="false"
android:rowCount="3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
//Line 1----------
<LinearLayout
android:id="@+id/linearLayout_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_row="0"
android:orientation="horizontal">
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield00"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="0dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="0" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield01"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="9dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="1" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield02"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="-1dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="2" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
//Line 2--------------
<LinearLayout
android:id="@+id/linearLayout_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_row="1"
android:orientation="horizontal">
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield10"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="0dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="3" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield11"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="9dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="4" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield20"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="0dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="5" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_row="2"
android:orientation="horizontal">
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield12"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="-1dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="6" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield21"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="9dp"
android:layout_marginVertical="25dp"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="7" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/shield22"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:layout_marginHorizontal="-1dp"
android:layout_marginVertical="25dp"
android:layout_weight="1"
android:adjustViewBounds="true"
android:onClick="drop"
android:scaleX="2.0"
android:scaleY="2.0"
android:tag="8" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</GridLayout>
重点是,我想在游戏结束后清理ImageViews上的图片(此应用程序适用于游戏)。
我尝试从网格布局中获取线性布局作为子项,然后从每个线性布局中将每个ImageView作为子项。它不起作用,代码如下:
public void restart(View view){
GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout);
clean(gridLayout);
}
//Clean ImageViews
public void clean(GridLayout gridLayout){
for(int i=0; i<gridLayout.getChildCount(); i++){
LinearLayout linearLayout = (LinearLayout) gridLayout.getChildAt(i);
for(int j=0; j<linearLayout.getChildCount(); i++){
((ImageView) linearLayout.getChildAt(j)).setImageResource(0);
}
}
}
当调试器指示我时,崩溃出现在“((ImageView)linearLayout.getChildAt(j))。setImageResource(0);”线。
另外,我已经使用了“removeAllViews()”方法。它会删除所有图片但不允许在新游戏启动时再次删除它们(除非应用程序重新启动,这对我不起作用)。
知道如何实现这个目标吗?
非常感谢你提前= D
答案 0 :(得分:1)
您尝试将第二个for循环中的每个子布局转换为错误的ImageView,因为某些子元素的类型为“Space”。
尝试在第二个for循环中添加此内容以检查视图是否为ImageView
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
下次还要在问题中包含堆栈跟踪
答案 1 :(得分:1)
你在这里遇到两个错误:
1:
在第二个loop
,
用 j ++ 替换 i ++ 。
for(int j=0; j<linearLayout.getChildCount(); i++){}
,
你只需要替换这个
for(int j=0; j<linearLayout.getChildCount(); j++){}
,
<强> 2 强>
您正在遍历LinearLayout内部的循环,其中包含ImageView以及Space。我们你必须检查childView的类类型。
为此,您可以使用instanceof
关键字。
您只需替换此代码即可。
//Clean ImageViews
public void clean(GridLayout gridLayout){
for(int i=0; i<gridLayout.getChildCount(); i++){
LinearLayout linearLayout = (LinearLayout) gridLayout.getChildAt(i);
for(int j=0; j<linearLayout.getChildCount(); j++){
Object obj = linearLayout.getChildAt(j);
if (obj instanceof ImageView) {
ImageView imageView = (ImageView) linearLayout.getChildAt(j);
imageView.setImageResource(0);
}
}
}
}