본문 바로가기
Android Studio/Kotlin

Android Studio 리사이클러뷰 아이템 클릭 시 화면 전환(서버연결시)

by ksb0511 2020. 11. 2.

리사이클러뷰 안에는 아이템들이 들어있다.

리사이클러뷰 속 아이템

 예를 들어 위와 같은 사진처럼 리사이클러뷰를 만들고, 아이템 클릭 시 각 아이템 정보에 해당하는 화면으로 이동한다면?

혹은 같은 화면이지만 아이템별로 불러와야 하는 서버가 다르다면?

 

이런 경우엔 onClick 메소드를 이용하여 간단히 해결할 수 있다.

 

 먼저 리사이클러뷰는 다 만들어져 있다는 가정하에 시작을 할 것이다.

리사이클러뷰가 만들어져 있는 액티비티 내에서만 코드를 작성한다. 코드 예시를 보여주자면, 이런 식으로 메소드 하나만 작성해주면 된다.

override fun onClick(v: View?) {
        if (v?.parent == rv){
            val intent: Intent = Intent(this, ItemNextActivity::class.java)
            intent.putExtra("Idx", Data[rv.getChildAdapterPosition(v)].item_Idx)
            startActivity(intent)
        }
}

코드에 대해 간단한 설명을 하자면,

v?.parent 와 rv가 같은 지에 대한 여부를 먼저 판단하는데, 이때 rv는 해당 리사이클러뷰(현재 액티비티에서 사용하고 있는 리사이클러뷰)를 말한다. 그 후에 이동할 액티비티명을 Intent를 이용하여 코드를 작성한다.

그리고 startActivity()를 호출하기 전에 putExtra를 이용하여 다음 화면에 넘어갈 때, 어떤 서버를 불러와야 될 지에 대한 힌트를 주는 데이터를 넘겨주어야 한다.

 

이것을 코드 내에선 Data[rv.getChildAdapterPosition(v)].item_Idx 라고 작성을 하였는데,

  1. 먼저 Data가 무엇이냐면.... 말하기에 앞서 서버 연결 시라는 가정을 했기 때문에 Data가 의미하는 바는 서버로부터 응답받아오는 바디를 말한다. 즉 data클래스의 배열 버전이다. 왜 배열 버전이냐 하면, 하나의 아이템에는 하나의 응답 바디(하나의 데이터 클래스)가 존재한다. 리사이클러뷰에는 아이템이 하나만 있는 게 아니라 여러 개의 아이템들이 있다. 그렇기 때문에 데이터 클래스를 하나의 객체라고 생각을 하고 여러 객체를 담고 있는 배열을 만들어야 하는 것이다. 보통 Data 선언은 아래 코드와 같이 한다.(참고용)

  2.  다음으로 rv.getChildAdapterPosition(v)를 사용하면 자동으로 아이템 포지션값을 찾아온다. 그리고 그 객체를 담고 있는 배열인 Data에서 포지션 값에 해당하는 객체의 Idx값처럼 고유번호(이 부분은 각자 상황에 맞게!! name 혹은 number가 될 수도 있음. 위 코드는 그저 예시일 뿐임)를 putExtra를 이용하여 보내줌으로써 다음 액티비티에서 해당 값을 넘겨받아 그에 걸맞는 서버를 불러올 수 있다.

  3. 그러면 끝 😁👍🏻

// MyItemData는 서버 응답바디(데이터 클래스) - 1번 참고용 코드
var Data = arrayListOf<MyItemData>()

- 여기서 쓰이는 MyItemData는..

서버 응답바디

이런 형태의 서버 응답바디를 말합니다.

'Android Studio > Kotlin' 카테고리의 다른 글

Android Studio 리사이클러뷰 생성 (Kotlin)  (0) 2020.07.23
Android Studio Request Code  (0) 2020.04.07
Koltin의 특징  (0) 2020.03.24
Android Studio Bottom navigation(Kotlin)  (0) 2020.03.23
Fragment에서 Activity로 화면전환  (0) 2020.03.01

댓글