์๋ ํ์ธ์.
์ด๋ฒ์๋ RecyclerView๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๊ตฌ์ฑ์์์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
RecyclerView ๊ตฌ์ฑ์์
- RecyclerView: ๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ทฐ๊ฐ ํฌํจ๋ ViewGroup. ๋ทฐ ์์ฒด๋ฅผ ๋ปํ๋ฉฐ, ๋ ์ด์์์ RecyclerView๋ฅผ ์ถ๊ฐํด ์ฃผ์ด์ผ ํฉ๋๋ค.
- RecyclerView.Adapter: ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํฉ๋๋ค.
- RecyclerView.ViewHolder: ๋ชฉ๋ก์ ๊ฐ ๊ฐ๋ณ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๋ทฐํ๋์ ์์ฑ ์์ ์๋ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ์์ฑ ์ดํ RecyclerView๊ฐ ๋ทฐํ๋๋ฅผ ๋ฐ์ดํฐ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
- LayoutManager: ๋ชฉ๋ก์ ๊ฐ๋ณ ์์๋ฅผ ์ ๋ ฌํฉ๋๋ค.
1. RecyclerView
๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ทฐ๊ฐ ํฌํจ๋ ViewGroup
์ค์ ํ๋ฉด์์ ๋ชฉ๋ก์ด ํ์๋์ด์ผ ํ๋ ๊ณณ์ ๋ฐฐ์นํฉ๋๋ค.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager" />
</FrameLayout>
์ ์ฝ๋์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ชฉ๋ก์ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ฉด ์ ์ฒด์ ๋ฆฌ์คํธ๊ฐ ํ์๋ฉ๋๋ค.
LayoutManager๋ ์์ ์ฝ๋์ฒ๋ผ xml์์ ์ง์ ํ ์๋ ์๊ณ , ์ฝ๋์์ ์ง์ ํ ์๋ ์์ต๋๋ค.
2. RecyclerView.Adapter

์์ ์์๋ฅผ ์ ๊น ๋ด ์๋ค.
์ ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ ๋ณด๋ฉด, ์ผ์ชฝ์๋ ์ํ์ ๋ํ๋ด๋ ์ฌ์ง์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ์ํ ์ด๋ฆ, ์๋ฌธ ์ด๋ฆ, ๊ฐ๊ฒฉ์ด ์์๋๋ก ์ธ๋ก๋ก ๋์ด๋์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋๋ ์ ๊ทธ๋ฆผ ๊ทธ๋๋ก ์ค์ง๋ ์๊ฒ ์ฃ .
{
"์ฝ๋_๋ธ๋ฃจ": {
"์ฌ์ง": "url1",
"์๋ฌธ์ด๋ฆ": "Cold_Brew",
"๊ฐ๊ฒฉ": "6900"
},
"์์ด์ค_์๋ชฝ_ํ๋_๋ธ๋_ํฐ": {
"์ฌ์ง": "url2",
"์๋ฌธ์ด๋ฆ": "Iced_Grapefruit_Honey_Black_Tea",
"๊ฐ๊ฒฉ": "7700"
},
"๋ธ๊ธฐ_์์ฌ์ด_๋ ๋ชจ๋ค์ด๋_์คํ๋ฒ
์ค_๋ฆฌํ๋ ์
": {
"์ฌ์ง": "url3",
"์๋ฌธ์ด๋ฆ": "Strawberry_Acai_with_Lemonade_Starbucks_Refreshers",
"๊ฐ๊ฒฉ": "7900"
}
}
JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค๋ฉด ๋๊ฐ ์ด๋ฐ ๋ด์ฉ์ผ๋ก ์ค์ง ์์๊น์?
๊ทธ๋ผ ์ด์ ์ด ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๊ณณ์ ์ด๋ป๊ฒ ํ์๋์ด์ผ ํ๋์ง ์ ์ํ๊ณ , ๊ฐ ์๋ฃ์ ๋ฐ๋ผ ์์ดํ ๋ทฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์๋ ์ฌ์ง์ฒ๋ผ ๋ง์ ๋๋ค.

์ฆ, Adapter๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๊ฐ ํญ๋ชฉ์ ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
3. RecyclerView.ViewHolder
๋ชฉ๋ก์ ๊ฐ ๊ฐ๋ณ ์์๋ฅผ ์ ์
ViewHolder๋ ๊ทธ ์ด๋ฆ์ฒ๋ผ, ๊ฐ๋จํ ๋งํด์ ๊ฐ ํญ๋ชฉ์ ๋ทฐ๋ฅผ "ํ๋"ํ๊ณ ์๋ ์์์ ๋๋ค.
Adapter์์ ๊ฐ ํญ๋ชฉ์ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ผ ๊ทธ ๋ทฐ๋ฅผ ๊ทธ๋๋ก ๋ฆฌ์คํธ์ ์ฐจ๋ก๋๋ก ์ฌ์ฉํ ์๋ ์์๊น์?
์์ต๋๋ค. Recyclerview์ ํญ๋ชฉ์ ํ์ํ๊ธฐ ์ํด์๋ ๋จ์ํ ๋ทฐ๋ง ์์ด์๋ ์ ๋ฉ๋๋ค.
onClickListener๊ฐ์ ์ฝ๋ฐฑ๋ ๋ถ์ฌ์ผ ํ๊ณ , index์ id๋ ๋ถ์ฌ์ผ ํ๊ณ , ์ฌํ์ฉ์ ์ํ ์ ๋ณด๋ ๋ญ ๊ทธ๋ฐ ๋ด๋ถ ๋์์ ์ํ ๋ฉํ๋ฐ์ดํฐ๋ค...
์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ItemView์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ๋ฆฌ์คํธ ๊ตฌํ์ ์ํ ๋ฉํ๋ฐ์ดํฐ๋ค๊น์ง ํฌํจํ Wrapper Class๊ฐ ๋ฐ๋ก ViewHolder๋ผ๊ณ ํ ์ ์๊ฒ ์ต๋๋ค.
4. LayoutManager
LayoutManager๋ RecyclerView์ ์ ๋ ฌ ํ์์ ๊ด๋ฆฌํฉ๋๋ค.
RecyclerView์ ๊ฐ ์์ดํ ์ด ํ๋ฉด์ ํ์๋๋ ๋ฐฉ์์ผ๋ก๋ ํฌ๊ฒ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- Linear: ์๋๋ก ์ญ์ญ ๋ด๋ฆฌ๊ฑฐ๋ ์์ผ๋ก ๋ฐ ์ ์๋, ํํ ๋ณผ ์ ์๋ ๋ฆฌ์คํธ ํํ
- Grid: ์ฌ๋ฌ ํญ๋ชฉ๋ค์ ํ์ํ๊ธฐ ์ข์ ๊ฒฉ์ ํํ
- StaggerdGrid: ๊ฒฉ์ ํํ์์ ์ธ๋ก ๊ธธ์ด ์ง์ ์ด ์์ ๋ก์ด ํํ
์๋ก ์ถ๊ฐ๋๋ ์์ดํ ์ ํ๋ฉด ํ์๋ฅผ ๊ด๋ฆฌํ๋ ๋งํผ, ์์ดํ ๋ทฐ์ ์ฌํ์ฉ ์ ์ฑ ๋ LayoutManager์์ ์ ์ดํฉ๋๋ค.
์ ๋ฆฌ
๋๋ต์ ์ธ RecyclerView์ ๊ตฌ์ฑ ์์๋ค์ ์ดํด๋ณด์์ต๋๋ค.
๋ค์ ํฌ์คํ ์ RecyclerView์ ์์ธํ ์ฝ๋๋ค์ ์ ๊ฐ...ํ๋ฟ๋ ๋ฐ๊น์ง ์ดํดํ๊ณ ๋์ ์ฌ๋ผ์ฌ ์์ ์ด์์.
13501์ค์ ์ฝ๋๋ฅผ ์ ์ฝ์ด๋ณด๊ณ ๋์์ค๊ฒ ์ต๋๋ค.
๊ทธ๋์ ๋ ํฐํธ๋ฅผ ๋ฐ๊ฟ ๋ดค๋๋ฐ ๊ธ์ด ์์ฃผ ์๋ป์ก๋ค์.
์ง์ ์ธ๊ฑธ...
'๐ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RecyclerView์ ๋ํ์ฌ (feat. ListView) (0) | 2023.11.03 |
---|
์๋ ํ์ธ์.
์ด๋ฒ์๋ RecyclerView๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๊ตฌ์ฑ์์์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
RecyclerView ๊ตฌ์ฑ์์
- RecyclerView: ๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ทฐ๊ฐ ํฌํจ๋ ViewGroup. ๋ทฐ ์์ฒด๋ฅผ ๋ปํ๋ฉฐ, ๋ ์ด์์์ RecyclerView๋ฅผ ์ถ๊ฐํด ์ฃผ์ด์ผ ํฉ๋๋ค.
- RecyclerView.Adapter: ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํฉ๋๋ค.
- RecyclerView.ViewHolder: ๋ชฉ๋ก์ ๊ฐ ๊ฐ๋ณ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๋ทฐํ๋์ ์์ฑ ์์ ์๋ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ์์ฑ ์ดํ RecyclerView๊ฐ ๋ทฐํ๋๋ฅผ ๋ฐ์ดํฐ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
- LayoutManager: ๋ชฉ๋ก์ ๊ฐ๋ณ ์์๋ฅผ ์ ๋ ฌํฉ๋๋ค.
1. RecyclerView
๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ทฐ๊ฐ ํฌํจ๋ ViewGroup
์ค์ ํ๋ฉด์์ ๋ชฉ๋ก์ด ํ์๋์ด์ผ ํ๋ ๊ณณ์ ๋ฐฐ์นํฉ๋๋ค.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager" />
</FrameLayout>
์ ์ฝ๋์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ชฉ๋ก์ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ฉด ์ ์ฒด์ ๋ฆฌ์คํธ๊ฐ ํ์๋ฉ๋๋ค.
LayoutManager๋ ์์ ์ฝ๋์ฒ๋ผ xml์์ ์ง์ ํ ์๋ ์๊ณ , ์ฝ๋์์ ์ง์ ํ ์๋ ์์ต๋๋ค.
2. RecyclerView.Adapter

์์ ์์๋ฅผ ์ ๊น ๋ด ์๋ค.
์ ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ ๋ณด๋ฉด, ์ผ์ชฝ์๋ ์ํ์ ๋ํ๋ด๋ ์ฌ์ง์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ์ํ ์ด๋ฆ, ์๋ฌธ ์ด๋ฆ, ๊ฐ๊ฒฉ์ด ์์๋๋ก ์ธ๋ก๋ก ๋์ด๋์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋๋ ์ ๊ทธ๋ฆผ ๊ทธ๋๋ก ์ค์ง๋ ์๊ฒ ์ฃ .
{
"์ฝ๋_๋ธ๋ฃจ": {
"์ฌ์ง": "url1",
"์๋ฌธ์ด๋ฆ": "Cold_Brew",
"๊ฐ๊ฒฉ": "6900"
},
"์์ด์ค_์๋ชฝ_ํ๋_๋ธ๋_ํฐ": {
"์ฌ์ง": "url2",
"์๋ฌธ์ด๋ฆ": "Iced_Grapefruit_Honey_Black_Tea",
"๊ฐ๊ฒฉ": "7700"
},
"๋ธ๊ธฐ_์์ฌ์ด_๋ ๋ชจ๋ค์ด๋_์คํ๋ฒ
์ค_๋ฆฌํ๋ ์
": {
"์ฌ์ง": "url3",
"์๋ฌธ์ด๋ฆ": "Strawberry_Acai_with_Lemonade_Starbucks_Refreshers",
"๊ฐ๊ฒฉ": "7900"
}
}
JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค๋ฉด ๋๊ฐ ์ด๋ฐ ๋ด์ฉ์ผ๋ก ์ค์ง ์์๊น์?
๊ทธ๋ผ ์ด์ ์ด ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๊ณณ์ ์ด๋ป๊ฒ ํ์๋์ด์ผ ํ๋์ง ์ ์ํ๊ณ , ๊ฐ ์๋ฃ์ ๋ฐ๋ผ ์์ดํ ๋ทฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์๋ ์ฌ์ง์ฒ๋ผ ๋ง์ ๋๋ค.

์ฆ, Adapter๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๊ฐ ํญ๋ชฉ์ ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
3. RecyclerView.ViewHolder
๋ชฉ๋ก์ ๊ฐ ๊ฐ๋ณ ์์๋ฅผ ์ ์
ViewHolder๋ ๊ทธ ์ด๋ฆ์ฒ๋ผ, ๊ฐ๋จํ ๋งํด์ ๊ฐ ํญ๋ชฉ์ ๋ทฐ๋ฅผ "ํ๋"ํ๊ณ ์๋ ์์์ ๋๋ค.
Adapter์์ ๊ฐ ํญ๋ชฉ์ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ผ ๊ทธ ๋ทฐ๋ฅผ ๊ทธ๋๋ก ๋ฆฌ์คํธ์ ์ฐจ๋ก๋๋ก ์ฌ์ฉํ ์๋ ์์๊น์?
์์ต๋๋ค. Recyclerview์ ํญ๋ชฉ์ ํ์ํ๊ธฐ ์ํด์๋ ๋จ์ํ ๋ทฐ๋ง ์์ด์๋ ์ ๋ฉ๋๋ค.
onClickListener๊ฐ์ ์ฝ๋ฐฑ๋ ๋ถ์ฌ์ผ ํ๊ณ , index์ id๋ ๋ถ์ฌ์ผ ํ๊ณ , ์ฌํ์ฉ์ ์ํ ์ ๋ณด๋ ๋ญ ๊ทธ๋ฐ ๋ด๋ถ ๋์์ ์ํ ๋ฉํ๋ฐ์ดํฐ๋ค...
์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ItemView์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ๋ฆฌ์คํธ ๊ตฌํ์ ์ํ ๋ฉํ๋ฐ์ดํฐ๋ค๊น์ง ํฌํจํ Wrapper Class๊ฐ ๋ฐ๋ก ViewHolder๋ผ๊ณ ํ ์ ์๊ฒ ์ต๋๋ค.
4. LayoutManager
LayoutManager๋ RecyclerView์ ์ ๋ ฌ ํ์์ ๊ด๋ฆฌํฉ๋๋ค.
RecyclerView์ ๊ฐ ์์ดํ ์ด ํ๋ฉด์ ํ์๋๋ ๋ฐฉ์์ผ๋ก๋ ํฌ๊ฒ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- Linear: ์๋๋ก ์ญ์ญ ๋ด๋ฆฌ๊ฑฐ๋ ์์ผ๋ก ๋ฐ ์ ์๋, ํํ ๋ณผ ์ ์๋ ๋ฆฌ์คํธ ํํ
- Grid: ์ฌ๋ฌ ํญ๋ชฉ๋ค์ ํ์ํ๊ธฐ ์ข์ ๊ฒฉ์ ํํ
- StaggerdGrid: ๊ฒฉ์ ํํ์์ ์ธ๋ก ๊ธธ์ด ์ง์ ์ด ์์ ๋ก์ด ํํ
์๋ก ์ถ๊ฐ๋๋ ์์ดํ ์ ํ๋ฉด ํ์๋ฅผ ๊ด๋ฆฌํ๋ ๋งํผ, ์์ดํ ๋ทฐ์ ์ฌํ์ฉ ์ ์ฑ ๋ LayoutManager์์ ์ ์ดํฉ๋๋ค.
์ ๋ฆฌ
๋๋ต์ ์ธ RecyclerView์ ๊ตฌ์ฑ ์์๋ค์ ์ดํด๋ณด์์ต๋๋ค.
๋ค์ ํฌ์คํ ์ RecyclerView์ ์์ธํ ์ฝ๋๋ค์ ์ ๊ฐ...ํ๋ฟ๋ ๋ฐ๊น์ง ์ดํดํ๊ณ ๋์ ์ฌ๋ผ์ฌ ์์ ์ด์์.
13501์ค์ ์ฝ๋๋ฅผ ์ ์ฝ์ด๋ณด๊ณ ๋์์ค๊ฒ ์ต๋๋ค.
๊ทธ๋์ ๋ ํฐํธ๋ฅผ ๋ฐ๊ฟ ๋ดค๋๋ฐ ๊ธ์ด ์์ฃผ ์๋ป์ก๋ค์.
์ง์ ์ธ๊ฑธ...
'๐ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RecyclerView์ ๋ํ์ฌ (feat. ListView) (0) | 2023.11.03 |
---|