들어가기 전에
연락처 앱에서 볼 수 있는 리스트는 어떻게 만들 수 있는 걸까요?
리스트 안에 들어가 있는 각각의 데이터는 같은 모양이 계속 반복되면서 보이는데 이 경우에 어떻게 레이아웃을 만들어야 할까요?
리스트뷰에는 여러 개의 데이터를 넣어 보여줄 수 있는데, 좀 더 쉽게 만들 수 있도록 어댑터라는 것을 만들어 사용합니다.
어댑터라는 것을 사용해야 하니까 처음에는 복잡하게 느껴지지만 리스트뷰뿐만 아니라 격자형태로 보여주는 그리드뷰나 콤보박스 모양의 스피너에도 비슷한 방식으로 사용된다는 걸 알게 되면 여러 개의 아이템을 보여주는 경우에는 비슷한 방식으로 사용한다는 걸 알게 될 겁니다.
리스트뷰를 어떻게 사용하는지 알아봅시다.
*** 최근 실무에서는 리스트뷰(ListView)보다는 리사이클러뷰(RecyclerView)를 많이 사용합니다. 다만 리스트뷰에 대한 내용을 이해하는 것이 리사이클러뷰를 만들 때도 기본이 되므로 먼저 학습해봅니다. 리사이클러뷰에 대해서는 강좌 7-4를 보시기 바랍니다. ***
학습 목표
- 리스트뷰와 어댑터의 관계를 살펴보고 리스트뷰가 동작하는 방식을 이해해봅시다.
- 리스트뷰에 여러 개의 데이터를 넣어 보여주려면 어떤 것들을 만들어야 하는지 설명해봅시다.
- 그리드뷰와 리스트뷰의 차이점을 설명해봅시다.
핵심 단어
- 리스트뷰 (ListView)
- 어댑터 (Adapter)
학습하기
리스트뷰 (ListView)
여러 개의 아이템 중에서 하나를 선택하는 방식을 가진 선택 위젯은 어댑터를 사용합니다.
화면에 보이는 뷰가 데이터를 관리하는 것이 아니라 어댑터가 데이터를 관리하는 방식을 사용하게 되죠.
어댑터는 데이터를 관리하면서 동시에 위젯을 통해 보일 각각의 아이템을 위해 뷰를 만들어주기까지 합니다.
리스트뷰는 여러 개의 아이템을 위, 아래로 스크롤할 수 있게 해주면 그 안에 들어가 있는 각각의 아이템을 순서대로 보여주는 역할을 합니다.
각각의 아이템은 독립적인 뷰로 만들어지게 되고 이 뷰들이 모여있는 형태를 유지해 주는 것이 리스트뷰인 거죠.
주의할 점은 리스트 아이템의 데이터는 리스트뷰가 관리하는 것이 아니라 어댑터에서 관리한다는 것입니다.
그리고 어댑터를 리스트뷰에 설정하면 리스트뷰는 어댑터에게 데이터나 각각의 아이템을 위한 뷰에 관해 물어보게 됩니다.
각각의 아이템을 위한 뷰도 어댑터에서 만들어주기 때문에 리스트뷰는 어댑터의 getView 메소드를 호출하여 뷰 객체를 반환받은 후 화면에 보여주게 됩니다.
*** 최근 실무에서는 리스트뷰(ListView)보다는 리사이클러뷰(RecyclerView)를 많이 사용합니다. 다만 리스트뷰에 대한 내용을 이해하는 것이 리사이클러뷰를 만들 때도 기본이 되므로 먼저 학습해봅니다. 리사이클러뷰에 대해서는 강좌 7-4를 보시기 바랍니다. ***
생각해보기
리스트뷰의 각 아이템으로 보이는 레이아웃에도 프레임레이아웃이나 상대레이아웃을 사용할 수 있을까요?
어댑터 안에 정의한 ArrayList 객체 안에 들어가는 원소의 자료형은 어떤 것이든 가능한 걸까요?
만약 그렇다면 화면에 보이는 아이템의 레이아웃과 함께 수정해야 할까요?
참고 자료
comment
실행하면 코드 오류는 안뜨지만 실행시 바로 꺼지네요... 원인이 뭘까요?
감사합니다
MainActivity.java 에서
실행하니,
에서 incompatible types라고 뜹니다 ㅠㅠ 코드를 맞게 친 것 같은데.. 왜그럴까요?
3번 들으니까 이제 이해가 갑니다 ㅎㅎ.. 리스트뷰 많이 연습해봐야겠네요~ 재밌습니다.
어렵네요. 전체를 3번 들었더니 조금 와닿는 느낌이 듭니다^^;
글로벌로 선언하지 않고 지역변수로 선언한뒤에 메소드 호출할때 입력인자로 추가적으로 넣어주는것은 불가능한가요?
강의를 여러번 들으면서 외우게 됬습니다. 이 과정에서 궁금한 것은 왜 여기서 이 메소드가 나오는지 ex) convertView가 뭔지는 알지만 구체적으로 다른 상황에서는 어떻게 사용되어지는지. (따라만 했기때문에 내것으로 만들지는 못하여서 다른 소스에서 마음대로 못사용할 것 같음).
SingerItem item = (SingerItem)adapter.getItem(position) 이라는 문법들 등.
안드로이드는 재료가 많아서 모르는 것 하나하나 구글링을 통해서 공부를 했지만 개념이 어려워 재료를 내 것으로 만들어 적용하는데 큰 어려움을 겪고 있습니다, 그냥 여러번 반복해서 외우기만 해도 되는건가요?
⭐️생각해보기⭐️
1. 두 레이아웃 역시 뷰 객체이므로 사용할 수 있을 것 같습니다.
2. 네 어느 것이든 가능합니다만 generic을 사용하여 한가지 자료형만 add될 수 있도록 지정해줄 수도 있습니다.
3. 데이터에 해당하는 ArrayList와 레이아웃은 분리되어 있으므로 수정할 필요가 없습니다.
프로젝트 진행에 필요한 아이콘 파일들 제공해주시면 감사드리겠습니다.
첫번째 영상 13:40초 자막이
"자바에서 bin" 이 아니라 "bean" 아닌가요?
adapter를 main의 이너클래스로 말고 따로 클래스로 만들 때 adapter의 getView에서 getApplicationContext()를 뭐로 바꿔야하나요?
3번째 동영상 5분 33초 까지 진행하고서 정재곤 선생님 처럼 run 하였습니다.
그런데 run task 는 되는데 앱이 바로 중지됩니다.
원인도 모르겠고 답답합니다.
쭉 들어오던 것 중에 가장 복잡하네요...
view.setImage(item.getResId()); 이 부분이 안되는데
SingerItem.java에서 setImage를 하지 않았는데 갑자기 어떻게 되신거죠???
걸그룹 이름과 전화번호를 '추가'버튼을 이용하여 리스트에 추가한 후에 그 정보들이 앱을 종료하거나 에뮬레이터를 종료했을 때도 남아있게 하는 방법은 어떻게 하나요? 앞으로의 강의에서 배울 내용인가요? ?
convertView는 어디에서 나오는건가요 인식이안됩니다.
adapter additem 에 문자열 삽입시ㅣ 오류가 발생하는 이유를 잘모르겠습니다.
이게 철자를 쳐도 글자가 나오지 않습니다.
getItem 만들시 position 이 아닌 int i 로 불려오는데 포지션으로 바꾸어야 되나요
인식을못하네요
어뎁터는 왜 이너클래스로 만든건가요?