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

BaseAdapter 상속받는 임의 Adapter클래스 질문입니다..

0 추천
class ListAdapter extends BaseAdapter{
Context context;
LayoutInflater inflater;
ArrayList<Member> arMem;
int layout;

public ListAdapter(Context aContext, int aLayout, ArrayList<Member> aarMem) {
context = aContext;
inflater = (LayoutInflater)aContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arMem = aarMem;
layout = aLayout;
}

@Override
public int getCount() {
return arMem.size();
}

@Override
public Object getItem(int position) {
return arMem.get(position).name;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
if (convertView == null) {
convertView=inflater.inflate(layout, parent, false);
}
TextView txt = (TextView)convertView.findViewById(R.id.text);
txt.setText(arMem.get(position).name);

Button btn = (Button)convertView.findViewById(R.id.btn);
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String str = arMem.get(pos).name + "에게 귓속말을 합니다.";
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
});

return convertView;
}
}
}

 

화면에 리스트를 뿌려줍니다.

 

왼쪽엔 이름, 오른쪽엔 귓속말하기 버튼.

 

xml문서는 두개

1. TextView와 Button이 있는 레이아웃.

2. LinearLayout안에 ListView만 선언되어 있는 레이아웃.

 

JAVA 소스에서

onCreate부분에 배열을 임의로 만들고 추가했습니다.

 

그리고 나서

BaseAdapter를 상속받는 Adapter클래스를 구현해서

그 Adapter를 이용해 배열을 list에 set 시킵니다.

 

여기서 질문입니다.

BaseAdapter를 상속받는 Adapter클래스를 만들 때

class ListAdapter extends BaseAdapter{
		Context context;
		LayoutInflater inflater;
		ArrayList<Member> arMem;
		int layout;

이러한 멤버변수들을 만들어주는데

때에따라 만들어주는 멤버변수의 갯수나 종류가 다르더군요.

언제 뭘 어찌 만들어야하는지 궁급합니다.

 

그리고 그 밑에

public ListAdapter(Context aContext, int aLayout, ArrayList<Member> aarMem) {
context = aContext;
inflater = (LayoutInflater)aContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arMem = aarMem;
layout = aLayout;
		}

이런 생성자가 있는데 왜 인자로 infater는 안가지고있는지.. 가져도 상관이 없는지..

 

이상 질문입니다.

 

제발 알려주십시오.. 봐도봐도 이해가 안가서..

감사합니다..

윤둥이 (4,560 포인트) 님이 2013년 4월 17일 질문

1개의 답변

0 추천
 
채택된 답변
질문의 요지가 무엇인지 조차 잘 모르겠네요..;

어댑터에 대한 이해가 아직 부족해 보이시는데요..

 

 

어댑터에서 화면을 구현하는 부분은 getView 부분입니다.

가장 중요한 부분입니다. 이곳 소스를 보면서 분석하시는게 이해하시기 쉬워 보입니다.

getView는 리스트의 한 칸 한 칸을 미리 준비하는 겁니다.

현재 저 소스에서는 보시면 아시겠지만 getView에서 사용하기 위한 것들을 전역변수로 만들어서 생성자에서 넘겨받으면서 준비하고 있죠.

 

getView소스를 볼까요.

보면 마지막에 convertView를 반환합니다. convertView가 실제 리스트뷰 화면 한칸 한칸을 구성하는 뷰입니다.

먼저 convertView에 inflate로 xml로 미리 만들어진 layout을 준비합니다.  

 

저 소스에서는 layout을 생성자에서 받아서 사용하네요.

만약 리스트뷰에서 모든 화면이 같다면 저렇게 layout을 받을 필요 없이 그냥 바로 R.layout.xxx 이런식으로 넣어도 됩니다.

그리고 아래 보시면 그 레이아웃안에 있는 텍스트뷰와 버튼을 각각 세팅하고 있는거네요.

 

생성자에서 넘겨받는 값들은 전부 겟뷰에서 사용하고 있는 것들을 준비하기 위한겁니다.
gusdn9 (1,560 포인트) 님이 2013년 4월 17일 답변
윤둥이님이 2013년 4월 17일 채택됨
감사합니다 정말 너무너무 감사합니당 ㅠㅠ

신입 개발자인데..
아직 회사 프로젝트 소스는 잘 못보구
과제같은거 하는중에 많이막히는데 따로 가끔 여쭤봐도 괜찮을까요 ㅠ
사수한테 물어보세요
사수 놔둿다 머합니까
워낙 바빠보이시고....서비스쪽이시라..
UI하시던분이 가서 제가 공부해서 맡을거같거든요..ㅠㅠ
...