코린이 탈출기

chapter 6.4 - 리스트뷰 만들기 (3) - ArrayList 이용, 실제 목록 추가, 어댑터-리스트뷰 연결 본문

인터넷 강의/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기

chapter 6.4 - 리스트뷰 만들기 (3) - ArrayList 이용, 실제 목록 추가, 어댑터-리스트뷰 연결

50HEE 2021. 5. 11. 16:52

이전에는 데이터를 만들어서 어떤 모양으로 뿌려질지를 엮어주는 과정으로 Adapter에 대해 다루었습니다.

 

2021.05.10 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 6.3 - 리스트뷰 만들기 (2) - Adapter 클래스 뼈대 작업

 

이번에는 ArrayList를 이용하여 실제 목록을 추가하고, 어댑터와 리스트뷰를 연결하겠습니다.

 

 

 

코드를 작성하는 곳은 MainActivity.kt입니다.

 

ArrayList 작성

 

액티비티에서 실제 목록을 담아줄 ArrayList를 작성해보겠습니다. 

액티비티의 멤버 변수(클래스 내부 변수)로 ArrayList를 만들었습니다.

실제 목록에 들어갈 데이터들을 ArrayList 변수에 추가해주겠습니다. 12번 줄과 같습니다.

val 목록 변수 명 = ArrayList<뿌려줄 데이터 클래스> ( )

 

실제 뿌려줄 데이터들을 ArrayList에 추가해보겠습니다.

ArrayList에 추가하는 방법은 onCreate 함수에 생성하겠습니다.

지금은 서버 통신을 다루지 못하기 때문에 직접 코드를 작성하지만, 나중에는 서버 통신으로 목록 데이터를 받아서 ArrayList에 담아주는 방법을 다루겠습니다.

23 ~ 28번 줄처럼 함수 내에 데이터를 추가하였습니다.

데이터를 추가하는 방법은 어떤 리스트에 추가할 것인지를 작성하고, 추가한다는 의미의 add를 작성합니다.

그 뒤에는 전에 작성했던 데이터 클래스를 작성하여 안에 원하는 재료를 넣어주면 됩니다.

mStudentList.add(Student("이름", 출생 연도)

다르게 표현하면

목록 변수 명.add(데이터 클래스 명(주 생성자의 재료))

 

만들어 둔 Adapter 클래스를 액티비티에 있는 리스트뷰와 연결해보겠습니다.

 

액티비티에서 사용할 수 있게 멤버 변수로 생성하여 사용하려고 합니다. 하지만 기존에 했던 것처럼 일반 변수(val 변수 명 = 값)로 설정하면 어댑터가 제대로 동작하지 않습니다. 그 이유는 onCreate 내에 코드를 작성해야 제대로 동작할 수 있기 때문입니다. 어댑터를 멤버 변수에 바로 생성자를 작성을 하면 작동하지 않습니다.

그래서 나중에 데이터를 초기화해준다는 'lateinit'으로 설정하겠습니다. 그래서 = 이 아닌 : 으로 작성하여 무엇을 넣어줄 것인지를 약속을 해주는 것입니다. 15번 줄과 같습니다. 실제로 채워 넣는 것은 onCreate에 작성해주면 됩니다. 

lateinit var 어댑터 변수 명 : 어댑터 클래스 명

 

이제 실제로 채워 넣어주는 것을 해보겠습니다.

어댑터를 만들 때 생성자를 작성하였습니다. 그 생성자를 맞게 채워 넣어주어야 합니다. 31번 줄과 같습니다.

만들어 둔 StudentAdapter은 총 3개로 context, resId, List를 작성해주어야 합니다. 

context란 쉽게 생각하면 지금 내가 보고 있는 화면이 어디인지를 즉, 화면 정보를 넣어준다고 생각하시면 됩니다.

지금 보는 화면인 MainActivity에서 보고 있다는 뜻으로 this를 넣어줍니다.

 

resId는 폴더들 중에서 res라는 폴더를 본 적이 있습니다.

res 폴더 안에 있는 것 중에서 무엇을 사용할 것인지를 정하는 것입니다.

resId라는 변수를 만난다면 보통은 R로 시작을 합니다.

layout 폴더에 들어가서 원하는 목록을 불러오면 됩니다.

 

지난번에 만든 한 칸에 해당하는 xml의 모양으로 뿌려진다는 것을 의미합니다.

list는 위에서 만든 데이터 목록을 뿌려달라는 의미입니다.

즉, 23 ~ 28번 줄에 해당하는 데이터를 뿌려달라는 의미입니다.

어댑터 변수 명 = 어댑터 클래스 명(context, resId, list)

다르게 표현하면

어댑터 변수 명 = 어댑터 클래스 명(어느 화면, 어떤 모양, 어떤 목록을 뿌릴 것인지)

 

이렇게 객체화가 완료된 즉, 실제로 만들어진 어댑터 변수들을 리스트뷰 어댑터로 지정하겠습니다. 34번 줄에 해당합니다.

리스트뷰 아이디.adapter = 어댑터 변수 명

 

여기까지 작성하고 에뮬레이터를 실행하면 리스트뷰의 칸이 위에 설정한 데이터 수만큼의 칸만 구성하고 내용은 변하지 않습니다.

그 이유는 어댑터 클래스를 구성할 때 getView 함수에 상황을 봐서 기존에 만든 xml을 그대로 결과까지 작성하라고 코딩을 하였기 때문입니다.

 

 

 

이제 내용을 실제로 반영하는 방법은 다음 챕터를 통해 다루겠습니다.

Comments