2017-05-07 4 views
0

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 : 나는 선형 레이아웃을 제거하고 단지 내부 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); 

적절한 캐스팅을 사용하십시오.