2017-05-07 12 views
0

私は3列と3行のグリッドレイアウトを持っています。最初の行と3つの列すべてに対して、私は線形レイアウトを持ち、同様に次の2行については、線形レイアウトを持っています。各線形レイアウトは、それぞれの線形レイアウトにおいて、それぞれ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:私は、リニアレイアウトを削除し、すぐ内側imageviewsを置けば私のプログラムが実行されて結構ですグリッドレイアウト私は、これらを再設定している間に、線図レイアウト内の画像にアクセスしている間に例外が発生していると思います。 この行にエラーが発生しています。

((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); 

適切にキャスティングします。

関連する問題