[Android/Kotlin]RecyclerView ๊ตฌํ˜„

hyihyiยท2023๋…„ 5์›” 29์ผ
0

๐Ÿ“ข๋ฆฌ์†Œ์Šค ๋ช…์— ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ๋•Œ
: ์†Œ๋ฌธ์ž๋กœ ์“ฐ์ž!

๐Ÿ“ขpublic open fun makeText(p0: Context!, p1: CharSequence!, p2: Int): Toast! defined in android.widget.Toast
this ๋’ค์— @"Activity์ด๋ฆ„" ์ž…๋ ฅ

Toast.makeText(this@ContentListActivity, "ํด๋ฆญ ์„ฑ๊ณต", Toast.LENGTH_SHORT).show()

-๋กœ๊ทธ์ถœ๋ ฅ

Log.d("๋””๋ฒ„๊น…์šฉ ํƒœ๊ทธ", items.toString())

1. RecyclerView๊ฐ€ ๋“ค์–ด๊ฐˆ ํ™”๋ฉด ์ƒ์„ฑ

<ContentListActivity\>์™€ <activity_content_list.xml> ์ƒ์„ฑ

<?xml version="1.0" encoding="utf-8"?>
    <layout>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".contentsList.ContentListActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ContentListActivity ํ™”๋ฉด"
            android:textSize="25sp"
            android:textStyle="bold"
            android:textColor="#000000"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="20dp"/>


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="80dp"/>

        <ImageView
            android:id="@+id/addBtn"
            android:layout_width="150dp"
            android:layout_height="50dp"
            android:src="@drawable/siteadd_button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginBottom="30dp"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

2. RecyclerView ์•ˆ์— ๋“ค์–ด๊ฐˆ xml ์ƒ์„ฑ

<content_rv_item.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="260dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textArea"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="Text Area"
        android:textSize="25sp"
        android:textStyle="bold"
        android:background="@drawable/text_stroke"
        android:gravity="center"
        android:layout_gravity="center"/>

    <ImageView
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        android:src="@drawable/addplz" />

    <ImageView
        android:src="@drawable/bookmark_white"
        android:layout_marginTop="10dp"
        android:layout_gravity="center"
        android:layout_width="30dp"
        android:layout_height="30dp"/>

</LinearLayout>

3. Adapter์— ์—ฐ๊ฒฐํ•˜๊ธฐ

<ContentRVAdpater> ์ƒ์„ฑ

package com.example.recyclerview.contentsList

import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
import com.example.recyclerview.R

class ContentRVAdapter(val items : ArrayList<String>) : RecyclerView.Adapter<ContentRVAdapter.Viewholder>() {

    //ViewHolder ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContentRVAdapter.Viewholder{
        val v = LayoutInflater.from(parent.context).inflate(R.layout.content_rv_item, parent, false)
        return Viewholder(v)
    }

    //๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ViewHolder ์•ˆ์˜ ๋‚ด์šฉ์„ ์ฑ„์›Œ์คŒ
    override fun onBindViewHolder(holder: ContentRVAdapter.Viewholder, position: Int){
        holder.bindItems(items[position])
    }

    //์ด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ
   override fun getItemCount(): Int {
        return items.size
    }

    //item์— ์žˆ๋Š” ๋‚ด์šฉ๋ฌผ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์—ฐ๊ฒฐํ•ด์คŒ
    inner class Viewholder(itemView : View) : RecyclerView.ViewHolder(itemView){

        fun bindItems(item : String){

        }
    }
}

4. <ContentListActivity> ์ฝ”๋“œ ์ˆ˜์ •

package com.example.recyclerview.contentsList

import android.app.DatePickerDialog
import android.database.DatabaseUtils
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.recyclerview.R
import com.example.recyclerview.databinding.ActivityContentListBinding


class ContentListActivity : AppCompatActivity() {

    private lateinit var binding : ActivityContentListBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_content_list)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_content_list)

        val rv : RecyclerView = findViewById(R.id.rv)

        val items = ArrayList<String>()
        
        items.add("a") //์ž„์˜์˜ 6๊ฐœ ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค€ ๊ฒƒ
        items.add("b")
        items.add("c")
        items.add("c")
        items.add("c")
        items.add("c")

        val rvAdapter = ContentRVAdapter(items)
        rv.adapter = rvAdapter

        rv.layoutManager = GridLayoutManager(this,2)

        //์—ฌํ–‰์ง€ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ
        binding.addBtn.setOnClickListener {
            val builder = AlertDialog.Builder(this)

            val dialogView = layoutInflater.inflate(R.layout.custom_dialog, null)
            val dialogSite = dialogView.findViewById<EditText>(R.id.dialogSite)
            val dialogCompanion = dialogView.findViewById<EditText>(R.id.dialogCo)
            
            builder.setView(dialogView)
                .setPositiveButton("ํ™•์ธ") { dialogInterface, i ->
                    /* ํ™•์ธ์ผ ๋•Œ main์˜ View์˜ ๊ฐ’์— dialog View์— ์žˆ๋Š” ๊ฐ’์„ ์ ์šฉ */
                    Log.d("TAG", dialogSite.text.toString())
                    Log.d("TAG", dialogCompanion.text.toString())
                }
                .setNegativeButton("์ทจ์†Œ") { dialogInterface, i ->
                    /* ์ทจ์†Œ์ผ ๋•Œ ์•„๋ฌด ์•ก์…˜์ด ์—†์œผ๋ฏ€๋กœ ๋นˆ์นธ */
                }
                .show()
            
        }
    }
}

๊ฒฐ๊ณผ

profile
๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์“ฐ๋Š” ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€