본문 바로가기

Android/Kotlin

kotlin 으로 recyclerView 구성하기

반응형

안녕하세요 오늘은 kotlin으로 RecyclerView를 만들어보겠습니다.


저는 지금 java로 짜 놓은 것들을 리팩토링 하면서 배우고 있는 상태라


제가 틀린 부분을 지적해주시면 감사하겠습니다!!!!



필요한 구성 

1. RecyclerView fragment

2. RecyclerVIew Adapter

3. RecyclerView ViewHolder

4. RecyclerView Item


설명은 싫고 코드를 보면서 이해를 하겠다 하시는 분들은, 


https://github.com/JC-Choo/JC_Android/tree/master/RecyclerMain_Kotlin/kotlin/com/example/administrator/recyclerview/recycler1/recycler1


를 참고하세요!



1. RecyclerView Fragment

우선 저는 Fragment로 구성했습니다. 한 액티비티에 여러 recyclerview를 띄우는 걸 연습하는 과정이라


fragment가 싫다! activity로 구성할거다! 하시는 분은 바꾸시면 되요!


    private lateinit var recyclerItem1List: MutableList<RecyclerItem1>
    private val linearLayoutManager by lazy { LinearLayoutManager(context) }
    private lateinit var recyclerAdapter1: RecyclerAdapter1

이 부분을 보시면, lateinit으로 필요할 때 선언해 사용했습니다.


미리 사용하면 굳이 사용하지 않아도 메모리를 잡아먹는다고 해서 lateinit으로 선언했는데, 굳이 이렇게 할 필요는 없습니다. 각자 스타일대로 코딩하세요!


        RecyclerFragment1RecyclerView.layoutManager = linearLayoutManager

        recyclerItem1List = ArrayList()
        for (i in 0 until 20) {
            val recyclerItem1 = RecyclerItem1("RecyclerFragment1 Test_$i", false)
            recyclerItem1List.add(recyclerItem1)
        }
        recyclerAdapter1 = RecyclerAdapter1(recyclerItem1List)
        RecyclerFragment1RecyclerView.adapter = recyclerAdapter1

저는 kotlin extension 을 사용해 view의 id를 바로 할당해서 구성했습니다.


gradle에 추가하는 부분은 따로 코드에 올려놓지 않았어요! 찾아서 해보시길 바래요!


for구문의 until 과 .. 의 차이는 해보시면 압니다!



    private fun getName(recyclerAdapter1: RecyclerAdapter1?): String {
        selectedName = ""
        val listName = getContactsName(recyclerAdapter1)
        for (i in listName.indices) {
            selectedName += listName[i].toString() + "\n"
        }

        return selectedName
    }

    // 이름을 activity 로 리턴
    private fun getContactsName(recyclerAdapter1: RecyclerAdapter1?): List<String> {
        val list = recyclerAdapter1!!.recyclerItem1List
        val listName = ArrayList<String>()

        for (i in list.indices) {
            val (name, isChecked) = list[i]
            if (isChecked) {
                listName.add(name)
            }
        }
        return listName
    }


이 부분은 제가 선택한 recyclerVIew의 item들의 이름을 가져오게끔 구성해 놓은 fun 입니다.


체크 후 아이템들을 가져와 띄워주는 걸 연습했기 때문에 이를 이용하면,


다양한 recyclerView 이용 시에 참고하시기 편할거 같네요! 화이팅!





2. RecyclerView Adapter

adapter는 더 간단합니다.


기본 RecyclerView.Adapter<ViewHolder> 를 상속하고 기본 fun만 출력해주고 구성해주면 됩니다!



class RecyclerAdapter1(val recyclerItem1List: List<RecyclerItem1>) : RecyclerView.Adapter<RecyclerItemViewHolder1>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerItemViewHolder1 {
        val rootView = LayoutInflater.from(parent.context).inflate(R.layout.item_recycler_fragment_1, parent, false)
        return RecyclerItemViewHolder1(rootView)
    }

    override fun onBindViewHolder(holder: RecyclerItemViewHolder1, position: Int) {
        holder.bind(recyclerItem1List[position])
    }

    override fun getItemCount(): Int {
        return recyclerItem1List.size
    }
}


이게 끝입니다!




3. ViewHolder


bind fun을 만들어 입력 값을 가져와 각각을 할당주면 끝입니다.





4. RecyclerItem


받아올 item을 할당해주면 끝!


위의 git서 참고해서 사용하세요!!



----------------이상 RecyclerVIew 를 Kotlin으로 구성했습니다.


틀린 부분, 잘못 이해한 부분, 오타 등 지적주시면 감사합니다.




반응형

'Android > Kotlin' 카테고리의 다른 글

kotlin Extension 으로 핸드폰 크기 확인  (0) 2019.05.22
extesion 이용한 custom toast 만들기  (0) 2018.11.28
Material Calendar 커스텀하기 (2)  (12) 2018.11.28
기본 fun 만들기  (0) 2018.05.12
kotlin 사용 이유와 기본 문법  (0) 2018.04.29