보통 드로어블은 일단 형식에 맞게 저장이 되어 있다면, R.drawable.파일명 참조로 읽어들일 수 있습니다.
때로는 파일명이 앞부분을 같게 하고 일괄적으로 번호를 붙여 저장하기도 하는데요. 이 경우 R.string이나 R.id로 불가능합니다. 배열에 저장해야 되는데 아래처럼 하면 안됩니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="image1">R.drawable.image1</string>
...
<string name="image10">R.drawable.image10</string>
</resoruces>
이것을 코틀린 코드에서 받아내서 루프로 배열에 저장하면 저장된 값은 String이지, R.drawable 참조값이 아니라서 아무런 기능을 못합니다.
대신 TypedArray로 지정해서 가져오는 방법이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="image_array">
<item>@drawable/idols1</item>
<item>@drawable/idols2</item>
<item>@drawable/idols3</item>
<item>@drawable/idols4</item>
</string-array>
<resources>
이렇게 지정해두고
var image = resources.obtainTypedArray(R.array.image_array)
var _index = image!!.getResourceId(position, -1)
view.setImageResource(_index)
처럼 하면 됩니다. 이코드를 override fun onBindViewHolder(holder: ListHolder, position: Int) 함수처럼 position 값을 넘겨받는 함수에 기재하면 배열로 읽어들인 TypedArray를 R.drawable 참조와 동일하게 써서 처리할 수 있게 됩니다.