2012-03-03 13 views
3

Android Appの場合、GridViewを使用してBaseAdapterを拡張してコンテンツを整理しています。拡張BaseAdapterクラスでオーバーライドする関数getViewについては、LinearLayoutを作成します.ImageViewとTextViewsを接続します。今、convertViewを実装する必要がありますが、プログラムでビューを作成したため、findViewByIdを使用してこれらの子ビューを検索してプロパティ(テキストやビットマップなど)を変更することはできません。親ビューからの子供ビューをAndroidでプログラムで作成する

私はそれらを作成するときに、それぞれのビューの種類に応じて一意のIDを割り当てるという考えがありました(例:my name textviewにidを1、description textviewにid 2などを渡します)。それらが同じ種類のビューであるかどうかにかかわらず、各ビュー間でIDが一意でなければならないかどうかはわかりませんでした。

結局のところ、プログラムで作成された線図表示の一部である子ビューを見つけるにはどうすればよいですか?

答えて

4

getChildAt()でLinearLayoutの子を取得することはできますが、正確にどの子が得られるのかを区別することは難しいです。

私はIDを割り当てる方が良い方法だと思います。ビューにIDを割り当て、後でfindViewById()経由でビューを取得できます。 IDはLinearLayoutごとに一意である必要はありません。このような

何か:

// Give more sensible names to ID's 
int IMAGEVIEW_ID = 0; 
int TEXTVIEW1_ID = 1; 
int TEXTVIEW2_ID = 2; 
int TEXTVIEW3_ID = 3; 

imageView.setId(IMAGEVIEW_ID); 
textView1.setId(TEXTVIEW1_ID); 
textView2.setId(TEXTVIEW2_ID); 
textView3.setId(TEXTVIEW3_ID); 

... 
// somewhere later 
ImageView imageView = (ImageView) convertView.findViewById(IMAGEVIEW_ID); 
+1

おかげで、それは動作しますが、私の見解を再利用していないため、メモリエラーのうちこれ以上!私はまた、私はC++と同じ方法で列挙子を作成することができず、それらの値を代入することができないので、失望したので、最終的な静的int VIEWNAMEを持つ入れ子になったクラスを作成し、 – contrapsych

+0

@ Sergey Glotov:「convertView」はここを参照してください。私は同じことを試みましたが、nullを得ました。 – kAnNaN

+0

@kAnNaN 'convertView'は、アダプタの' getView(int position、View convertView、ViewGroup parent) 'メソッドのパラメータです。 –

関連する問題