인프런) 앱 8개를 만들면서 배우는 안드로이드 코틀린

섹션 5. 트로트 가수 음악 목록 앱 만들기(1)-리스트뷰 복습

농농씨 2023. 8. 30. 20:21

-ListView vs RecyclerView

비슷해보이지만 역할이 다르다

후자가 구현하기 좀 더 어렵지만 성능이 더 좋다.

 

리스트뷰 복습겸 하나 더 만들어보자

-리스트뷰 만들기

액티비티에서 어댑터로 리스트 데이터를 넘기고

어댑터에서 값을 하나하나 아이템에 넣어준 다음

그 아이템들을 액티비티의 리스트뷰에 넣어준다.

<필요한 연결들>

1️⃣ 메인액티비티-어댑터

2️⃣ 어댑터-아이템레이아웃

3️⃣ 아이템레이아웃-메인레이아웃의 리스트뷰

 

이번에는 아이템들을 하나하나 클릭하면 어떻게 되는지도 알아보자

 

먼저, 메인 액티비티 레이아웃에 리스트뷰를 넣어주자.

 

(메인 액티비티 레이아웃 파일 없을 때 레이아웃 만드는 법)

 

리스트뷰 만들기

 

그 다음, 리스트뷰의 아이템 레이아웃 만들기

Layout우클릭-New-Layout Resource File 클릭으로 새 레이아웃 생성

전체를 <LinearLayout>으로 하고 텍스트뷰 넣기

아이디도 넣어줘야 함! 사진엔 없지만 listviewItemText라고 만들어줬음.

 

리스트뷰와 리스트 아이템 레이아웃을 만들었으니 그 둘을 연결해줄 어댑터를 만들자

코틀린 파일 만드는법:.kt로 끝나는 소스파일 있는 디렉토리 우클릭-New-Kotlin Class/File

이름은 ListViewAdapter

 

그 다음

어댑터가 리스트를 받아오도록 함

순서

ListViewAdapter 밑줄로 빨갛게 뜨는거 alt+enter 해서 멤버 다 임포트 해주고

각 멤버들 사용방법은 그냥 알아만 두고

중요한건 getItem()으로 리스트뷰 사이즈 정하기, getView()로 텍스트뷰 가져오기

 

convertView라는 변수 생성해서 변수가 비어있으면 뷰 가져오도록 함

findViewById로 아이템 레이아웃의 텍스트 영역을 아이디로 가져옴.

그리고 그 부분에 리스트의 데이터를 각각 넣어주도록 함.

 

<중간점검

<필요한 연결들>

1️⃣ 메인액티비티-어댑터

2️⃣ 어댑터-아이템레이아웃

3️⃣ 아이템레이아웃-메인레이아웃의 리스트뷰

 

지금 2️⃣에서 데이터를 넘겨주는 것만 함. />

 

이제 메인액티비티로 가서~

리스트 만들고 아이템들 집어넣고

어댑터 만들고 어댑터에 리스트 넣어주고 ➡️ 1️⃣번연결 완료

 

 

이제 3️⃣ 아이템레이아웃-메인레이아웃의 리스트뷰 연결할 차례

activity_main.xml의 리스트뷰에 아이디 추가해서

findViewById로 리스트뷰를 객체로 가져옴

그 리스트뷰의 자체 어댑터에, 내가 만든 어댑터를 연결해줌 ➡️ 3️⃣번연결 완료.

 

<강의에서의 실행화면>(내껀 오류 있어서 안됨)

리스트의 데이터를 잘 출력한 것을 알 수 있음

 

각 아이템 클릭 인식이 잘 되는지도 확인해보도록 하자

setOnItemClickListener를 추가해줘서 클릭된 아이템의 데이터를 토스트메시지로 띄워보자

<강의의 실행화면>

잘 된다.

 

 

 

조금 더 나아가기

A, B, C 와 같은 각각의 데이터 말고 데이터 '덩어리'를 넣어서 리스트뷰로 출력해보자

데이터 덩어리 : 데이터 모델

 

데이터 모델 파일 만들자.

코틀린 소스파일 새로 만들기

.kt로 끝나는 소스파일들 있는 디렉터리 우클릭-New-Kotlin Class/File

 

class가 아닌 data class, 괄호 모양도 중괄호{} 말고 소괄호()로 바꿔주기

 

리스트 새로 생성해서 ListViewModel 타입의 데이터 삽입해주고 그 데이터를 그대로 어댑터에 삽입해줘라

그런데 어댑터에 가보면, 어댑터가 리스트를 받게 했었던 부분에서 

String을 ListViewModel 이라는 데이터 타입으로 다시바꿔줘야한다.

 

ListViewAdapter 가 List를 받겠다고 했을 때 ListViewModel로 데이터가 들어갔으므로 

List는

List = [
         ListViewModel("a", "b"),
         ListViewModel("c", "d"),
         ListViewModel("e", "f")
         ]

이렇게 덩어리져서 들어갔다는 걸 의미한다.

 

아까 ListViewModel.kt 파일에서 데이터 모델 만들 때 첫번째 데이터는 text1, 두번재 데이터는 text2라고 이름지었으므로

각 데이터를 이용하고 싶으면 각 데이터 이름을 따로 이용해야 한다.

 

-둘다 이용하고 싶으니까 텍스트뷰를 하나 더 만들어주자.

텍스트뷰 하나 더 만들어주고

 

어댑터로 가서~

데이터 모델 ListViewModel text1 을 출력했던 것처럼

findViewById로 텍스트뷰를 객체로 가져오고

그 객체에 List의 text2를 출력하도록 하면 된다~

 

이런식으로 리스트뷰에 데이터모델을 넣을 수 있고... 아이템 각각을 클릭할수도 있다~