리사이클러뷰 안에는 아이템들이 들어있다.
예를 들어 위와 같은 사진처럼 리사이클러뷰를 만들고, 아이템 클릭 시 각 아이템 정보에 해당하는 화면으로 이동한다면?
혹은 같은 화면이지만 아이템별로 불러와야 하는 서버가 다르다면?
이런 경우엔 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 라고 작성을 하였는데,
-
먼저 Data가 무엇이냐면.... 말하기에 앞서 서버 연결 시라는 가정을 했기 때문에 Data가 의미하는 바는 서버로부터 응답받아오는 바디를 말한다. 즉 data클래스의 배열 버전이다. 왜 배열 버전이냐 하면, 하나의 아이템에는 하나의 응답 바디(하나의 데이터 클래스)가 존재한다. 리사이클러뷰에는 아이템이 하나만 있는 게 아니라 여러 개의 아이템들이 있다. 그렇기 때문에 데이터 클래스를 하나의 객체라고 생각을 하고 여러 객체를 담고 있는 배열을 만들어야 하는 것이다. 보통 Data 선언은 아래 코드와 같이 한다.(참고용)
-
다음으로 rv.getChildAdapterPosition(v)를 사용하면 자동으로 아이템 포지션값을 찾아온다. 그리고 그 객체를 담고 있는 배열인 Data에서 포지션 값에 해당하는 객체의 Idx값처럼 고유번호(이 부분은 각자 상황에 맞게!! name 혹은 number가 될 수도 있음. 위 코드는 그저 예시일 뿐임)를 putExtra를 이용하여 보내줌으로써 다음 액티비티에서 해당 값을 넘겨받아 그에 걸맞는 서버를 불러올 수 있다.
-
그러면 끝 😁👍🏻
// 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 |
댓글