R.array 참조로 드로어블 참조값 배열로 가져오기

Posted on

보통 드로어블은 일단 형식에 맞게 저장이 되어 있다면, 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 참조와 동일하게 써서 처리할 수 있게 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다