2012-01-07 66 views
0

私の問題はこれです。 私は自分のXMLレイアウトにいくつかのImageViewオブジェクトを持っています。私はいくつかの "if"と "else"(言いたいこと)の上にイメージを置くことができるようにしたい。だから私はすべてのオブジェクトを配列に割り当てると思った。しかし、アプリは始まりません。ここでは、私はそれを行っている方法です。ImageView(Android)の配列を設定する

private void setImageView(){ 
    images = new ImageView[imagesNR]; 
    images[0] = (ImageView) findViewById(R.id.imageView1); 
    images[1] = (ImageView) findViewById(R.id.imageView2); 
    images[2] = (ImageView) findViewById(R.id.ImageView01); 
    images[3] = (ImageView) findViewById(R.id.ImageView02); 
    images[4] = (ImageView) findViewById(R.id.ImageView03); 
    images[5] = (ImageView) findViewById(R.id.ImageView04); 
    images[6] = (ImageView) findViewById(R.id.ImageView05); 
    images[7] = (ImageView) findViewById(R.id.ImageView06); 
    images[8] = (ImageView) findViewById(R.id.ImageView07); 
    images[9] = (ImageView) findViewById(R.id.ImageView08); 
    images[10] = (ImageView) findViewById(R.id.ImageView09); 
    images[11] = (ImageView) findViewById(R.id.ImageView10); 
} 

私はそれはそれはpreatiest方法ではないのです実現が、私は新たなんだから、それは私が思い付いたものです。 私は申し訳ありませんエラーについてあまり話すことはできません。アプリは強制的に閉鎖されており、それはそれです。

私はImageViewの配列を持っているし、それに応じてそれらを操作することができ、他の方法はありますか?... 私はRelativeLayoutにオブジェクトを入れて、どここれらすべてのImageViewsなどを入れて設定したい、など

編集:

private ImageView images[]; 

これが私が配列を宣言した方法です。

+0

閉じるのトレースを貼り付けます。 – Joru

答えて

0

imageViewは、下のように定義されていますか(角かっこはチェックしてください)。これは私のアプリの一つからの定義であり、間違いなく働いています。

ImageView mCnName[]= new ImageView[NUMBER_OF_IMAGE]; 

方法は基本的に間違っていないが、すべてのImageViewが類似または同じ属性を持つべきであるならば、私は少し気後れアプローチを使用します。デフォルトではすべての画像ビューが青色の背景になるようにします。あなたのようにあなたのlayout.xmlファイルのいずれかにそれらの属性をすべて与えなければならないか、プログラムによってすべてImageViewのbgの色を変更するためにループを実行する必要があります。

ほぼすべての私のアプリで私はこのようなアプローチを好まれます。 xmlファイル内のすべての属性を持つImageViewを定義します。

  1. layoutinflaterを定義し、後であなたのレイアウトを設計し、変更することが容易である。このようparentLayout.addView(mCnName[i],null); で膨張したビューを追加mLayOutInflater=this.getLayoutInflater();
  2. mCnName[i]=mLayOutInflater.inflate(R.layout.yourImageView, null);
  3. を使用しています。

しかし私が言ったように、自分のアプローチを使用することは絶対に必要ではありません。あなたは働くことができます。

+0

あなたの方法を試してみる必要があります。私はそれが私がそれを得る前に私がしばらく時間がかかると思う... –

+0

OMG、私は愚かな....私は可変画像NRを設定していない...それはundfinedだった。 imagesNR = 12を設定しなければならず、すべてがうまくいきました..... OMG –

1

あなたは、すべてがうまくいっていると言うことを知っていますが、単なる提案です。今すぐこのモデルに慣れ親しむ時間があれば、これは後で多くのメリットがあります。あなたは、複数の画像ビューが複合画像ビューよりも高価であることを知っておくべきです。あなたが画像の配列を表示するのを探しているならば、私はそれだけのために設計された実装を使うことを提案します。ギャラリー、GridViewまたはListViewが気になります。

+0

「私の」方法が最高です、私は間違いなく「あなたの」方法を見ていきます。私は今のところそれを残すでしょう、それは動作し、私は現時点では時間がありません。計画は、私が "ラメ"バージョンでそれを改善しようとするだろうした後....それをもっと... "ダイナミック"と "プロ"話すようになります。しかし、チップをありがとう。 –

0

1.

for (int i = 0; i < container.getChildCount(); i++) { 
     images[i] = (ImageView) container.getChildAt(i); 
    } 

2。

for (int i = 0; i < 10; i++) { 
     int id = getResources().getIdentifier("R.id.imageView" + i, "id", null); 
     images[i] = (ImageView) getActivity().findViewById(id); 
} 

2つ目は、getIdentifierのドキュメントあたりため、非常に高価である:

注:この機能を使用することが推奨されていません。名前よりも識別子でリソースを取得する方がはるかに効率的です。

関連する問題