마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드책을 보고 있는데 커스텀어댑터부분이 이해가 안가서 질문합니다

0 추천

커스텀어댑터의 추상메소드를 구현하는 부분중에

getView를 구현하는 부분인데요 일단 책의 예제는 이렇습니다.

public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;
		if (convertView == null) {
			convertView = Inflater.inflate(layout, parent, false);
		}
		ImageView img = (ImageView)convertView.findViewById(R.id.img);
		img.setImageResource(arSrc.get(position).Icon);

		TextView txt = (TextView)convertView.findViewById(R.id.text);
		txt.setText(arSrc.get(position).Name);

		Button btn = (Button)convertView.findViewById(R.id.btn);
		btn.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				String str = arSrc.get(pos).Name + "를 주문합니다.";
				Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
			}
		});

		return convertView;
	}

여기서 layout은 임의로 만든 이미지와 텍스트 버튼으로 레이아웃 리소스안에 정의된 렐러티브레이아웃인데 제가 이해가 안가는 부분은

레이아웃은 하나고 그로 만들어진 뷰도 하나인데 어떻게 리스트를 채울 많은 뷰들이 나오는건가 하는부분인데요

처음에는 레이아웃이 하나라도 새 객체를 만들고 대입하면 다른 뷰가 되나 싶어 코드상에서 새 텍스트뷰객체를 만들고 거기다 findViewById로 xml상의 텍스트뷰를 가져와서 기존 레이아웃에 추가시켜봤는데 안되더군요

최초에 전개된 뷰 하나만 가지고 단순히 id만 불러와서 속성만 바꿨는데 여러객체가 나오는 부분이 잘 이해가 안갑니다.

이 구조를 설명해주실 분 있으신가요

익명사용자 님이 2015년 7월 10일 질문

3개의 답변

+1 추천
레이아웃은 하나고 그로 만들어진 뷰도 하나인데 어떻게 리스트를 채울 많은 뷰들이 나오는건가 하는부분인데요

에 대해서 저는 개인적으로..아래처럼 이해하고 넘어갔습니다.

우선 Arraylist의 size 만큼 getView가 호출되는 건가?라고요.

(윗분 말처럼 데이터 원본에 해당하는 커스텀Class의 객체를 Add한 만큼)

 

어댑터는 커스텀Class의 ArrayList를 인자로 받겠죠.

ex) arSrc는 ArrayList<MyClass> 객체

 

어댑터(아마 커스텀 어댑터)안의 오버라이딩된 getView에서

convertView = 작성한 XML(ex)list_item.xml). 즉, 여기서는 RelativeLayout

arSrc의 사이즈만큼 getView가 콜되어 그때마다

레이아웃이 전개되고 그 레이아웃이 리스트뷰의 한 항목으로 들어가는 가죠

즉, 말씀하신 레이아웃을 선언하고 단순히 그 객체를 재사용하는 것 인듯.

1. 레이아웃을 선언 -> inflate -> 리스트뷰의 항목으로 들어감 -> 종료

2. 레이아웃을 선언 -> inflate -> 리스트뷰의 항목으로 들어감 -> 종료

...

아닐수도 있고요 크크
치솟음 (3,710 포인트) 님이 2015년 7월 13일 답변
0 추천
객체를 add 해주지 않고서는 레이아웃 생성만으로 절대로 여러개가 나타날 수 없습니다.

add해주는 부분이 어딘가 있을 거예요
컵받침 (5,500 포인트) 님이 2015년 7월 13일 답변
0 추천
getview에 log 찍어보면 몇 번 호출되는지 알 수 있어요.
화면에 표시된게 5줄이면 5번 호출되니까, 한 줄에 한 번 호출되는 걸 알 수 있게돼죠 .
쎄미 (162,410 포인트) 님이 2015년 7월 13일 답변
...