RecyclerView๋ ์ฑ์์ ๊ฑฐ์ ํ์์ ์ธ ์กด์ฌ๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค. ๋๋ถ๋ถ์ ์๋น์ค๊ฐ ๋ฆฌ์คํธ ํ์์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๋ฏ ๋ฆฌ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด RecyclerView์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ setHasFixedSize
๋ฅผ true๋ก ์ค์ ํ๋ค๋ ๊ฒ ๋ฌด์์ ์๋ฏธํ ๊น??
ํ์๋ setHasFixedSize = true
์ ๋ฌธ์ฅ์ ๋ณ ์๋ฏธ ์์ด ํ์ดํํ๋ค. ์ด๋ ๊ฒ ํ๋ ๊ฒ์ ์ ๋ง ์ข์ง ์์ ์ต๊ด์ด๋ค. ํ์๋ ์ด ์ฝ๋๋ง ์ด๋ ๊ฒ ํ์ ๋ฟ, ๋ค๋ฅธ ์ฝ๋๋ ๋ค ์๊ฐํ๊ณ ์์ฑํ๋ค. ์๋ฌดํผ, ์ ํจ์๋ ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํด๋ณด์.
[setHasFixedSize]
-
StackOverflow์ ๋ต๋ณ์ ํด์ํ๋ค.
-
์๋์ ํจ์๋ฅผ ๋ณด์
void onItemsInsertedOrRemoved() {
if (hasFixedSize) layoutChildren();
else requestLayout();
}
-
๊ธฐ๋ณธ์ ์ผ๋ก ์์ดํ ์ ์ฝ์ , ์ด๋ ํน์ ์ ๊ฑฐํ ๋๋ง๋ค RecyclerView์ ํฌ๊ธฐ ๋ฐ ๋๋น๋ ๋์ด๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ, ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ค๋ฅธ ๋ทฐ์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค.
-
๋ฐ๋ผ์ ํญ๋ชฉ์ ์์ฃผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ, ํนํ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
-
์ด๋ํฐ์ ๋ด์ฉ์ ๋ณ๊ฒฝํด๋ ๋์ด๋ ๋๋น๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ, setHasFixedSize๋ฅผ true๋ก ์ค์ ํ์ฌ ๋ถํ์ํ ๋ ์ด์์ ํจ์ค๋ฅผ ํผํ๋ผ.
๊ฒฐ๊ตญ, ์์ดํ
ํญ๋ชฉ์ ์ถ๊ฐํ ๋๋ง๋ค RecyclerView์ ํฌ๊ธฐ๋ ๋ณ๊ฒฝ๋๋ค. ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋ ์ด์์์ ๊ทธ๋ฆด ๋, ํฌ๊ธฐ๋ฅผ ์ธก์ ํ๊ณ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋ฐ๋ณตํ ๊ฒ์ด๋ค. setHasFixedSize
์ ๊ธฐ๋ฅ์ RecyclerView์ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ์ผ์ ํ๋ค๋ ๊ฒ์ ์ฌ์ฉ์์ ์
๋ ฅ์ผ๋ก ํ์ธํ๋ค. ํญ๋ชฉ์ ๋์ด๋ ๋๋น๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ, ์ถ๊ฐ ๋๋ ์ ๊ฑฐ๋ ๋ชจ๋ ํญ๋ชฉ์ ๋์ผํ๋ค. setHasFixedSize
๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ํญ๋ชฉ์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์ด ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ํ๋์ง ํ์ธํ๋ค.
๋๋ถ๋ถ RecyclerView๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๋์ผํ ํฌ๊ธฐ์ ์์ดํ ํญ๋ชฉ์ ์ฌ์ฉ์์๊ฒ ๋ฆฌ์คํธ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋ค. ๋ฐ๋ผ์ ์์ดํ ์ ํฌ๊ธฐ๊ฐ ๋ณํ๋ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ด๊ณ , ๊ทธ๋ ๋ค๋ฉด setHasFixedSize๋ฅผ true๋ก ์ค์ ํจ์ผ๋ก์จ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ๋ช ์ํ๋๊ฒ ์ข๋ค. ๋ฐ๋ผ์ ๋ ์ด์์์ ๋ค์ ๊ทธ๋ฆฌ๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ํผํ๋๋ก ํ์ฌ ์ฑ๋ฅ ํ๋ฝ์ ๋ฐฉ์งํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
Reference