2012-03-03 4 views
3

Android App의 경우 GridView를 사용하고 BaseAdapter를 확장하여 내용을 구성합니다. 확장 된 BaseAdapter 클래스에서 오버라이드하는 getView 함수의 경우, ImageView 및 TextViews를 첨부 할 LinearLayout을 만듭니다. 이제는 convertView를 구현해야하지만 프로그래밍 방식으로 내 뷰를 만들었 기 때문에 findViewById를 사용하여 텍스트 및 비트 맵과 같은 속성을 변경하기 위해 이러한 하위 뷰를 찾을 수 있다고 생각하지 않았습니다.부모보기에서 자식보기를 Android에서 프로그래밍 방식으로 생성

나는 그들을 만들 때 각각 다른 유형의보기와 관련된 고유 한 ID를 할당 할 생각을 가지고있었습니다 (예 : 내 이름 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++에서와 동일한 방법으로 열거자를 만들 수 없으며 값을 할당 할 수 없다는 점에 실망했다. 그래서 final static int VIEWNAME으로 중첩 된 클래스를 만들고 그 수를 할당했다. – contrapsych

+0

@ Sergey Glotov : 여기서 "convertView"는 무엇을 의미합니까? 나는 똑같이 시도했지만 null을 얻었습니다. (선형 위치에 대해 시도) – kAnNaN

+0

@kAnNaN'convertView'는 어댑터의'getView (int position, View convertView, ViewGroup parent) 메서드의 매개 변수입니다. '메서드 –

관련 문제