2017-05-07 212 views
0

我有一個3列和3行的網格佈局。對於第一行和所有三列我有一個線性佈局和類似的下兩行,我有線性佈局。每個線性佈局有3個圖像,每個線性佈局分別有0,1,2列。點擊「再次播放」按鈕後,我想要取消設置圖像。但是,目前我正在收到錯誤消息。我的代碼如下: 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:我的程序運行是好的,如果我刪除的線性佈局,只是把imageviews內網格佈局。我想這些是在重置它的同時訪問linearlayout內部的圖像時發生的異常。 錯誤在該線

((ImageView) grid.getChildAt(i)).setImageResource(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); 

適當鑄造。