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. 전체 코드

 

 

GitHub - Notepad96/BlogExample

Contribute to Notepad96/BlogExample development by creating an account on GitHub.

github.com

 

300x250