Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- database
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Python
- ์ค๋ธ์
- ๊ฐ๋ฐ
- ๋ ์
- ์นดํ๋๊ฐ
- ๋ฐ์ํ
- ์ฑ
- ์ํ์ฃผ
- JavaScript
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ๋ฐฐ์์ ๋ฐฐ์
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ์ํ
- Java
- ์ฝ๋ฉ
- ์ค๋ผํด
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋ก๊ทธ๋๋ฐ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- html
- css
- ์๋ฐ
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ํ์ด์ฌ
- ๋๊ฐ
- ์ ๋ฆฌํธ๋ฆฌํธ
Archives
- Today
- Total
JiYoung Dev ๐ฅ
[Android] RecyclerView (2023.07.20, 24) ๋ณธ๋ฌธ
๋ฐ์ํ
๋ฐ๋ณต๋๋ ๋ ์ด์ด
์คํฌ๋กค
ArrayList → ๋ฐ์ดํฐ์ ์๋์ ์ ์ ์์ ๋ ์ฌ์ฉ
๋ฐฐ์ด → ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ ๋ (๋ฐ์ดํฐ์ ์๋์ด ์ ํด์ ธ ์์ ๋)
๋ฌด์กฐ๊ฑด ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ์๋!
RecyclerView ์๋ฆฌ
RecyclerView๋ ํ๋ฉด ํฌ๊ธฐ์์ ์ข๋ ์ฌ์ ์๊ฒ ๋ณต์ฌ ํ ์คํฌ๋กค์ ์ฌ๋ฆฌ๋ฉด view๋ฅผ ์ฌํ์ฉ
→ view๋ฅผ ์ฌํ์ฉํ๊ณ ๋ฐ์ดํฐ๋ง ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฆ
ListView๋ ๋ฐ์ดํฐ๊ฐ 100๊ฐ๋ฉด ํ ํ๋ฆฟ๋ 100๊ฐ → ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๋ถ๋ฌ์ค๋ ์๋๊ฐ ๋๋ ค์ง
Recycler View๋ ์๋๋ก์ด๋ ์ฑ์์ ๋ฆฌ์คํธ์ ๊ทธ๋ฆฌ๋์ ๊ฐ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ทฐ(View) ๊ทธ๋ฃน์ ๋๋ค. ๊ธฐ์กด ListView์ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์๋๋ก์ด๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์์ต๋๋ค.
Recycler View์ ์ฃผ์ ์๋ฆฌ
์ฌํ์ฉ(Recycling):
Recycler View๋ ๊ทธ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด "์ฌํ์ฉ"์ ์ค์ ์ผ๋ก ํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)์ ๋ณด์ฌ์ง ๋ ๋ฆฌ์คํธ๋ ๊ทธ๋ฆฌ๋์ ๊ฐ ์์ดํ ์ ๋ทฐ๋ก ํ์ํ๊ณ , ์คํฌ๋กค๋ง์ ๋ฐ๋ผ ํ๋ฉด์ ํ์๋๋ ์์ดํ ๋ค์ด ๋์์์ด ์ฌ์ฌ์ฉ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ๋ฉด์ ๋ณด์ฌ์ง๋ ์์ดํ ์ค ํ๋๊ฐ ์คํฌ๋กค๋์ด ํ๋ฉด์ ๋ฒ์ด๋๋ฉด ํด๋น ๋ทฐ๋ ์ฆ์ ์ฌํ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฌํ์ฉ ๋ทฐ๊ฐ ๋ฆฌ์คํธ์ ๋์์ ๋ค์ ๋ณด์ฌ์ง๋ ์๋ก์ด ์์ดํ ์ ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธ๋์ด ํ๋ฉด์ ํ์๋ฉ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ทฐ๋ค์ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ค์ด๋ค๊ณ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
ViewHolder ํจํด:
Recycler View๋ ViewHolder ํจํด์ ์ฌ์ฉํ์ฌ ๋ทฐ์ ์ฌํ์ฉ์ ๊ด๋ฆฌํฉ๋๋ค. ViewHolder๋ Recycler View์์ ์์ดํ ๋ทฐ๋ฅผ ๋ด์๋๋ ๊ฐ์ฒด๋ก, ๊ฐ ์์ดํ ๋ทฐ์ ๊ตฌ์ฑ ์์๋ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
RecyclerView๋ ์์ดํ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค ๋ ์๋ก ์์ฑํ๋ ๋์ , ์ด์ ์ ์์ฑ๋ ViewHolder ๊ฐ์ฒด๋ฅผ ์ฌํ์ฉํ์ฌ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด findViewById์ ๊ฐ์ ๋น์ฉ์ด ๋๋ ์์ ์ ๋งค๋ฒ ๋ฐ๋ณตํ์ง ์๊ณ ํจ์จ์ ์ผ๋ก ๋ทฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
LayoutManager:
Recycler View๋ ๋ทฐ๋ค์ ๋ฐฐ์น๋ฅผ ๊ด๋ฆฌํ๋ LayoutManager๋ฅผ ์ฌ์ฉํฉ๋๋ค. LayoutManager๋ Recycler View์๊ฒ ์ด๋ป๊ฒ ๋ทฐ๋ค์ ๋ฐฐ์นํด์ผ ํ๋์ง์ ๋ํ ์ญํ ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฆฌ์คํธ ํ์์ ๊ฒฝ์ฐ์๋ ์ธ๋ก๋ก ์์ดํ ๋ค์ด ๋์ด๋์ด์ผ ํ๊ณ , ๊ทธ๋ฆฌ๋ ํ์์ ๊ฒฝ์ฐ์๋ ๊ฒฉ์ ํํ๋ก ๋ฐฐ์น๋์ด์ผ ํฉ๋๋ค. LayoutManager๋ ์ด๋ฌํ ๋ทฐ ๋ฐฐ์น ๋ก์ง์ ๋ด๋นํ์ฌ Recycler View๊ฐ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋ทฐ๋ค์ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.Adapter: Recycler View๋ ๋ฐ์ดํฐ์ ๋ทฐ ๊ฐ์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ Adapter๋ฅผ ํ์๋ก ํฉ๋๋ค. Adapter๋ Recycler View์ ํ์ํ ์์ดํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ViewHolder๋ฅผ ์์ฑํ๊ณ ๋ฐ์ธ๋ฉํ์ฌ ํ๋ฉด์ ํ์ํ ๋ทฐ๋ค์ ์์ฑํฉ๋๋ค. ๋ํ ์ฌ์ฉ์์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ์ฌ ์ ์ ํ๊ฒ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ฌํ์ฉํฉ๋๋ค.
์ด์ ๊ฐ์ ์๋ฆฌ๋ค๋ก Recycler View๋ ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ๋ฆฌ์คํธ์ ๊ทธ๋ฆฌ๋๋ฅผ ๊ตฌํํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ฐ๋ผ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฑ์์๋ Recycler View๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
ViewHolder ํด๋์ค ์์ฑ
package com.sjy.ex20230720
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import org.w3c.dom.Text
class KakaoViewHolder(var itemView : View) : ViewHolder(itemView) {
//์์ฑ์ ์์
//class KakaoViewHolder extends ViewHolder{
// KakaoViewHolder(View itemView){
// super(itemView); super -> ์์ ํด๋์ค์ ์์ฑ์ ํธ์ถ
// }
// }
//ํ
ํ๋ฆฟ์ ์๋ view๋ฅผ ์ ์ฅ
var img : ImageView
var tv_name : TextView
var tv_message : TextView
var tv_time : TextView
//default ์์ฑ์ => ๋งค๊ฐ๋ณ์ X ์์ฑ์
init{
//itemView => template
img = itemView.findViewById(R.id.img)
tv_name = itemView.findViewById(R.id.tv_name)
tv_message = itemView.findViewById(R.id.tv_message)
tv_time = itemView.findViewById(R.id.tv_time)
}
}
Adaptor
์์์ ํน์ง
1. extends
- ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ(๋ฉ์๋), ํ๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋๋ค.
2. ~๊ณ์ด → ์ ์บ์คํ
- ์ ์บ์คํ : ํ์ ํด๋์ค ํ์ ์ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค ํ์ ์ผ๋ก ํ๋ณํ์ด ์ผ์ด๋๋ ๊ฒ
- ์์ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ก ์ ์บ์คํ ์ด ํญ์ ๊ฐ๋ฅํด์ผ ํ๋ค → ๋ฆฌ์ค์ฝํ์นํ์ ๋ฒ์น(LSP)
- ๋ค์ด์บ์คํ : ์ ์บ์คํ ๋ ๊ฐ์ฒด๋ฅผ ๊ธฐ์กด์ ํ์ ํด๋์ค๋ก ๋๋๋ฆฌ๋ ๊ฒ
** final ํค์๋
1. final ํ๋ : ์์ ์ด ๋ถ๊ฐ๋ฅ(์์)
2. final ํด๋์ค : ๋ ์ด์ ์์์ด ๋ถ๊ฐ๋ฅ
3. fianl ๋ฉ์๋ : ๋ ์ด์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅ
package com.sjy.ex20230720
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView.Adapter
class KakaoAdapter(var context:Context, var template:Int, var data:ArrayList<KakaoVO>)
: Adapter<KakaoViewHolder>() {
//์์ ํด๋์ค์ธ Adapter ํด๋์ค๋ ์ถ์ ํด๋์ค
// => ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ํ์ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ(์ฌ์ ์)ํด์ผํ๋ค.
// => ์ค๋ฒ๋ผ์ด๋ฉ ์ํ๋ ค๋ฉด ์ถ์ํ
//adapter : templete๊ณผ data ์ฐ๊ฒฐ (๋งค๊ฐ๋ณ์ 3๊ฐ : ํ๋ฉด, ํ
ํ๋ฆฟ, ๋ฐ์ดํฐ)
//
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KakaoViewHolder {
//templete์ ์๋ view๋ฅผ ์ ์ฅํ๋ viewholoder๋ฅผ ์์ฑ
//ํ๋์ ๋ฆฌ์ธ์ดํด๋ฌ๋ทฐ์์ ์ต์ด 1๋ฒ๋ง ์คํ >> onBindViewHolder์์ ๊พธ๋ฐ
//xml => kt(java) ๊ฐ์ฒด๋ก ๋ง๋๋ ์์
์ Inflater๋ผ๊ณ ๋ถ๋ฆ
//๋ํ์ ์ผ๋ก findViewById
//ViewHolder๋ฅผ ์์ฑํ ๋ Templete.xml์ Viewํ์
์ผ๋ก ๋ณํํด์ ์ ๋ฌ
var templete_view : View = LayoutInflater.from(context).inflate(template, parent, false)
var VH : KakaoViewHolder = KakaoViewHolder(templete_view)
return VH
}
override fun getItemCount(): Int {
//์ ์ฒด ์์ดํ
์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ ๊ณณ
//return 5 => 5๊ฐ ๋ฐํ
return data.size
}
override fun onBindViewHolder(holder: KakaoViewHolder, position: Int) {
//์ ๋ค๋ฆญ๊ธฐ๋ฒ : ํด๋์ค๋ฅผ ์ค๊ณํ๋ ์์ ์๋ ์๋ฃํ์ ๊ธฐ์ฌํ์ง ์๋๋ค.
//์ด์ ์ ์ฐ๋ ViewHolder์์ View๋ฅผ ๊บผ๋ด๋ค๊ฐ ArrayList์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค๋ก ๊พธ๋ฐ!
//getItemCount์ ์ ํ ์ซ์๋งํผ ํธ์ถ๋จ
var img : ImageView = holder.img
var tv_msg : TextView = holder.tv_message
var KakaoMessage : KakaoVO = data.get(position)
img.setImageResource(KakaoMessage.img)
tv_msg.text = KakaoMessage.msg
//ver2.
holder.tv_name.text = data.get(position).name
holder.tv_time.text = data.get(position).time
}
}
๋ฐ์ํ
'full stack > ์๋๋ก์ด๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ํ๋๊ทธ๋จผํธ(Fragment) (2023.07.25) (0) | 2023.07.25 |
---|---|
[Android] ํฌ์ผ๋ชฌ ๋๊ฐ ๋ง๋ค๊ธฐ (Volley, RecyclerView) (2023.07.24~25) (0) | 2023.07.25 |
[Android] visibility & enabled ์์ฑ (2023.07.19) (0) | 2023.07.19 |
[Android] JSON, GSON (2023.07.19) (0) | 2023.07.19 |
[Android] POST ๋ฐฉ์ ํต์ (2023.07.19~20) (0) | 2023.07.19 |