Android Kotlin RecyclerView Parent View Style - 부모 뷰 오브젝트 스타일 변경
Notepad96
·2022. 1. 17. 09:23
300x250
1. 결 과
# 이 글은 리사이클러 뷰의 아이템을 클릭하였을 시 Parent(=recyclerview가 있는 Activity)의 있는 다른 view object의 접근하여 배경색을 변경하는 방법을 기술한다.
2. Layout
2.1 activity_main.xml (메인 레이아웃)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/layout_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Parent View의 있는 레이아웃"
android:textSize="22sp"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
2.2 list_item.xml (리스트 항목 레이아웃)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="30dp">
</LinearLayout>
3. ListAdapter.kt (리사이클러뷰 어댑터)
package com.example.recyclerviewparent
import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.list_item.view.*
class ListAdapter: RecyclerView.Adapter<ListAdapter.MyViewHolder>() {
var colors = listOf("#ff0000", "#00ff00", "#0000ff", "#000000")
lateinit var parentContext: Context
inner class MyViewHolder(val layout: View): RecyclerView.ViewHolder(layout)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
parentContext = parent.context
return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false))
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.layout.list_item_layout.setBackgroundColor(Color.parseColor(colors[position]))
holder.layout.list_item_layout.setOnClickListener {
(parentContext as Activity).layout_color.setBackgroundColor(Color.parseColor(colors[position]))
}
}
override fun getItemCount(): Int {
return colors.size;
}
}
# parent의 view object의 접근하기 위해서는 우선 onCreateViewHolder서 parent view의 context를 저장한다.
# 그 다음 parentContext를 Activity로 형변환하면 parent activity(=recyclerview가 있는 activity)의 있는 다른 view object의 접근하여 스타일(배경색, 등)을 변경할 수 있다.
4. 전체 코드
300x250
'Android' 카테고리의 다른 글
Android Kotlin Chip Button (0) | 2022.01.31 |
---|---|
Android Kotlin Calendar - 달력/시계 날짜 및 시간 지정하기 (0) | 2022.01.18 |
Android Kotlin SnapHelper - 항목 단위로 스크롤 (0) | 2022.01.16 |
Android Kotlin Recyclerview - 리스트 항목 클릭 시 스타일 변경 (0) | 2022.01.13 |
Android Kotlin Bottom Navigation - 하단 네비게이션 (0) | 2022.01.12 |