2017-04-10 2 views
2

ここでは、64画像ビューのGridview(xml)を作成し、異なる場所に異なる画像をロードしようとする入力文字列に基づいています。GridView -NullPointerExceptionエラー - "子画像ビュー"にアクセスしよう

package com.example.android.chess; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class MainActivity extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    GridView gridView = (GridView) findViewById(R.id.gridView1); //gridView null 


    String FEN="/rnbqkbnr/pppppppp/8/8/8/8/8/8/PPPPPPPP/RNBQKBNR/"; 
    LoadPosition(gridView, FEN); 
} 
    public void LoadPosition(GridView gridView, String FEN) 
{ 
    int i=0; 
    ImageView child; 
    for(int l=0; l<gridView.getCount(); l++) { 
     child= (ImageView) gridView.getChildAt(l); 
     char c = FEN.charAt(i); 
     if (c=='/') 
      i=i+1; 

     else if(Character.isDigit(c)) { 
       i=i+1;     
       l = l + c-1; 
     } 

     else 
      { 
      child = (ImageView) gridView.getChildAt(l); 
      c = FEN.charAt(i); 
      LoadPieceImage(child,c); 
      i=i+1 
      } 

    } 
} 

}

LoadPieceImage(子、C)。 char cに基づいて異なる画像を読み込むメソッドです。

gridView.getChildAt(i)のグリッド表示がnullで、 が表示されていますが、java.lang.NullPointerExceptionが発生しています。

XML ...

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    > 

    <GridView 
    android:id="@+id/gridView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:columnCount="8" 
    android:layout_gravity="center" 
    android:padding="2dp" 
    android:background="#8C8C8C" 
    > 
    <ImageView 

     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:gravity="center" 
     android:background="#ffffff" 
     /> 
     <ImageView 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:background="#8C8C8C" 
     android:gravity="center" />  
      .................................... 
     </GridView> 
    </ScrollView> 

あなたはcontentviewがfindViewByIDとGridViewのを見つけたい場合は、これを試してみてください、私はそれを

+0

今setContentView(R.layout.activity_main)。エラーが発生しました 原因:java.lang.UnsupportedOperationException:addView(View、LayoutParams)がAdapterViewでサポートされていません.......................... ... at com.example.android.chess.MainActivity.onCreate(MainActivity.java:14) – Murali

+0

こんにちは、私はこのエラーが発生している理由を教えてください。ありがとう事前に – Murali

答えて

1

を修正するために助けてください:(または単にのgetViewメソッドの機能を変更します)GridViewのとそこからの絶景を取るためにそれを使用

super.onCreate(savedInstanceState); 
setContentView(R.layout.grid_layout); // attach the layout 
grid = (GridView) findViewById(R.id.grid); // id should be found now 

PS。また、私はあなたがおそらく問題を引き起こすかもしれないgridviewへのアダプタを設定する場所を見ることができませんでした。

+0

私はGridView setContentView(R.layoutを使用しています。グリッドレイアウト); setContentView(R.layout.activity_main);エラーを作成しています。唯一可能ですが、動作しません。 – Murali

1

グリッドビューがどこに指定されているのかわかりません。レイアウトxmlも投稿できますか?

activity_main XMLにgridviewがありますか?その場合は、次の行を使用する必要があります。

setContentView(R.layout.activity_main); 

それ以外の場合は、グリッドビューを見つけるための参照がありません。メソッドfindViewById()は、ビューが設定されていることを意味します。

あなたのアクティビティには、膨らませるために必要なビューがありません。それがなければ、その中の他のビューへの参照を取得することはできません。ですから、gridview参照がnullであるのは不思議ではありません。

また、残りのコードを見ると、forループを使ってアダプタの仕事をしようとしていると思います。 GridViewのアダプタは、XMLを掲示した後、あなたがループ

のためにそれをやろうとしている何をするために作られています: あなたはactivity_main.xml投稿は何ですか?そうであれば、gridviewは見つかるはずですが、gridviewはアダプタを通して項目を挿入しなければなりません。下記のリンクを見てください。

資源:

Gridview intro

Gridview + ImageView example

+0

変更されたsuper.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); GridViewのgridView =(GridView)findViewById(R.id.gridView1); // gridView null – Murali

+0

あなたのリンクに感謝します。 IDで検索して個別に作業することができないのはなぜですか? アダプタは、新しい情報でGridviewを変更したり更新したりするためのアイデアです。時には便利なこともあります。しかし、私が変更や更新をしたい場合は、idで試してみると非常に便利です。 間違って、これらのあなたの意見を親切に共有してください....ありがとう – Murali

+0

はい、あなたは正しいです。しかし、それはサポートされている/推奨されている方法ではないので、他の人があなたを手伝うことができないかもしれないバグや問題が発生する可能性があります。また、チェスゲームをしているようです。私はあなたが実際のゲームにしたい場合は、ゲームエンジンを使用することをお勧めします。 – Cymk

関連する問題