重置网格布局内的线性布局内的网格

时间:2017-05-07 18:40:30

标签: java android android-layout layout

我有一个包含3列和3行的网格布局。对于第一行和所有三列,我有一个线性布局,对于接下来的两行,我有类似的线性布局。每个线性布局在每个线性布局中具有分别具有列0,1,2的3个图像。我想在点击“再次播放”按钮后取消设置图像。但是这样做时我收到错误。我的守则如下: activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    tools:context="com.example.user.tic_tac_toe.MainActivity">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:background="#ccc"
        android:padding="15dp"
        android:visibility="visible"
        android:id="@+id/playAgainLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:text="TIC-TAC-TOE"
            android:gravity="center"
            android:ems="10"
            android:id="@+id/winnerMessage"
            android:textSize="30sp" />

        <Button
            android:text="Play Again"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/playAgainButton"
            android:gravity="center"
            android:background="@color/colorAccent"
            android:onClick="playAgain"
            android:visibility="invisible"/>
    </LinearLayout>

    <GridLayout
        android:layout_width="wrap_content"
        android:columnCount="3"
        android:rowCount="3"
        android:background="@drawable/board"
        android:id="@+id/grid"
        android:layout_height="360dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:layout_weight="1"
            android:visibility="visible"
            android:id="@+id/temp"
            android:layout_columnSpan="3"
            >

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView1"
                android:layout_row="0"
                android:layout_column="0"
                android:onClick="dropIn"
                android:tag="0"
                />

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1.01"
                android:padding="25dp"
                android:id="@+id/imageView2"
                android:layout_row="0"
                android:layout_column="1"
                android:onClick="dropIn"
                android:tag="1"
                />

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView3"
                android:layout_row="0"
                android:layout_column="2"
                android:onClick="dropIn"
                android:tag="2"
                />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:layout_weight="1"
            android:visibility="visible"
            android:id="@+id/temp3"
            android:layout_columnSpan="3"
            >

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView4"
                android:layout_row="1"
                android:layout_column="0"
                android:onClick="dropIn"
                android:tag="3"
                />

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView5"
                android:layout_row="1"
                android:layout_column="1"
                android:onClick="dropIn"
                android:tag="4"/>

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView6"
                android:layout_row="1"
                android:layout_column="2"
                android:onClick="dropIn"
                android:tag="5"
                />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="120dp"
            android:visibility="visible"
            android:id="@+id/temp2"
            android:layout_columnSpan="3"
            >
            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView7"
                android:layout_row="2"
                android:layout_column="0"
                android:onClick="dropIn"
                android:tag="6"
                />

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView8"
                android:layout_row="2"
                android:layout_column="1"
                android:onClick="dropIn"
                android:tag="7"
                />

            <ImageView
                android:layout_height="120dp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="25dp"
                android:id="@+id/imageView9"
                android:layout_row="2"
                android:layout_column="2"
                android:onClick="dropIn"
                android:tag="8"
                />
        </LinearLayout>
    </GridLayout>
</RelativeLayout>

我的playAgain功能如下:

public void playAgain(View view){

        active = true;

        Button button = (Button)findViewById(R.id.playAgainButton);
        button.setVisibility(View.INVISIBLE);
        TextView text = (TextView)findViewById(R.id.winnerMessage);
        text.setText("TIC-TAC-TOE");
        activePlayer = 0;
        for(int i=0; i<currentState.length; i++){
            currentState[i] = 2;
        }
        //changing the image of imageviews in grid layout
        GridLayout grid = (GridLayout)findViewById(R.id.grid);
        grid.removeAllViews();
        for(int i=0; i<grid.getChildCount(); i++){
            ((ImageView) grid.getChildAt(i)).setImageResource(0);
        }

    }

PS:如果我删除线性布局并将图像视图放在网格布局中,我的程序运行正常。我想这是在重置它时访问linearlayout中的图像时发生的异常。 此行发生错误

((ImageView) grid.getChildAt(i)).setImageResource(0);

1 个答案:

答案 0 :(得分:0)

没关系,我明白了。要访问任何布局中的任何元素,您需要执行此操作。

GridLayout grid = (GridLayout)findViewById(R.id.grid);
        for(int i=0; i<grid.getChildCount(); i++){
            System.out.println(grid.getColumnCount());
            LinearLayout ll = (LinearLayout) grid.getChildAt(i);
            for(int k=0; k<ll.getChildCount(); k++){
                System.out.println(ll.getChildAt(k));
                ((ImageView) ll.getChildAt(k)).setImageResource(0);

适当的铸造。