로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2571
좋아요 1436 수강생 20099
아래의 글은 BOOSTER 서포터즈로 활동했던 리미(dusdk***)님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/dusdkfla/221807699696
2)작성날짜: 20/02/13
<본문작성>

안녕하세요~

이번 포스팅은 안드로이드 초보자들이 많이 어려워하시는 리스트뷰에 대한 내용입니다.

리스트뷰는 설명만 눈으로 본다고 이해되는 것이 아니기 때문에 꼭! 여러번 혼자 코드를 작성해 보시기 바랍니다.


리스트뷰(ListView)

여러개의 아이템이 반복적으로 나타나 스크롤 형태로 보여주는 뷰 형태 입니다. 선택 위젯으로 분류되죠.

각각의 아이템은 독립적인 뷰로 만들어지게 되고 이 뷰들이 모여있는 형태를 유지해 주는 것이 리스트뷰인 거죠.

각 아이템은 클릭시 특정 반응을 보이게도 만들 수 있습니다.

이런 리뷰같은 일정한 형식의 아이템들을 스크롤로 반복적으로 보여줄 때 유용한 뷰 입니다.

리스트뷰는 어댑터라는 것을 이용합니다.

주의할 점은 리스트 아이템의 데이터는 리스트뷰가 관리하는 것이 아니라 어댑터에서 관리한다는 것입니다.

어댑터(Adapter)

데이터 관리의 역할을 합니다.

어댑터 클래스안의 getView() 메소드를 통해 각 아이템으로 표시할 뷰를 리턴해 줍니다.

한마디로 어댑터는 데이터를 관리하면서 동시에 위젯을 통해 보일 각각의 아이템을 위해 뷰를 만들어주기까지 합니다.

Adapter클래스를 예제 코드로 보면서 이해해 봅시다.

public class SingerAdapter extends BaseAdapter { Context context; ArrayList<SingerItem> items; LayoutInflater inflater; ImageView image; TextView name, mobile; public SingerAdapter(Context context, ArrayList<SingerItem> items) { this.context = context; this.items = items; inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void addItem(SingerItem item){ items.add(item); } @Override public int getCount() { return items.size(); } @Override public Object getItem(int i) { return items.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view==null){ view = inflater.inflate(R.layout.singer_item, viewGroup, false); } image = (ImageView)view.findViewById(R.id.image); name = (TextView)view.findViewById(R.id.name_text); mobile = (TextView)view.findViewById(R.id.mobile_text); SingerItem item = items.get(i); image.setImageResource(item.getResId()); name.setText(item.getName()); mobile.setText(item.getMobile()); return view; } }

adapter클래스를 정의하기 전에 SingerItem이라는 데이터 클래스를 정의해두었습니다.

getView()에서 각 아이템의 뷰가 별도의 뷰 이므로 따로 inflate를 시키는 것을 볼 수 있습니다.

inflate에 대해선 https://blog.naver.com/dusdkfla/221807835035 여길 참고하시길 바랍니다.

**최근 ListView보다 RecyclerView를 실무에서 더 많이 사용합니다. 하지만 RecyclerView의 이해를 위해 ListView를 먼저 잘 공부해 두는 것이 좋다고 생각됩니다.**

 

*********************************************