CustomListView 코틀린 전환하기

 

 

 

CustomListView를 java에서 사용하는 방법

2020/10/27 - [대외 활동/CADI(개발A 보충스터디)] - CustomListView - 1(java)

 

CustomListView - java

CustomListView 구현 CustomListview는 아이템을 별도의 xml로 만들고 그것을 Listview에 적용시켜서 사용하는 것이다. 간단한 문장이나 하나의 아이템만 보여주는 Listview와 달리 아이템을 더 추가하여 리스

dev-seungwon.tistory.com

 

 

 

위의 코드에서 xml부분은 동일하다. 따라서 java->kt파일로 변환된 모습만 살펴보자.

 

 

동일하게 총 3개의 .kt파일을 만들고 기능은 java와 같다.

 

 

 

Adapter에서의 핵심은 findViewById()함수를 사용해 선언할 필요가 없다는 점과 java와 비교하여 보다 간결해진 코드이다.

 

 

ListViewAdpater.kt

class ListViewAdapter : BaseAdapter() {
private val listViewItemList : List<ListViewItem>()
    override fun getCount(): Int {
        return listViewItemList.size
    }

    override fun getItem(position: Int): Any {
        return listViewItemList[position]
    }

    override fun getItemId(position: Int): Long
    {
        return position.toLong()
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        var convertView = convertView
        val pos = position
        val context = parent!!.context

        if (convertView == null)
        {
            val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
            convertView = inflater.inflate(R.layout.listview_item, parent, false)
        }

        val listViewItem: User = listViewItemList[pos]

        convertView!!.imageView1.setImageDrawable(listViewItem.icon)
        convertView.tv_title.text = listViewItem.title
        convertView.tv_desc.text = listViewItem.desc
        
        return convertView
    }
    
    fun addItem(icon: Drawable?, title: String?, desc: String?) {
        val item = ListViewItem() // 하나의 리스트 항목을 하나의 객체로 간주함
        item.title
        item.desc
        item.icon
        listViewItemList.add(item)
    }


}

 

 

 

 

MainActivity와 ListViewItem부분도 코드가 간결해졌다.

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val listview: ListView
        val adapter = ListViewAdapter()

         listview = findViewById<View>(R.id.listView_Shape) as ListView
        listview.adapter = adapter

        // 첫 번째 아이템 추가.
        adapter.addItem(ContextCompat.getDrawable(this, R.drawable.instagram), "instagram", "this is instagram")

        // 두 번째 아이템 추가.
        adapter.addItem(ContextCompat.getDrawable(this, R.drawable.youtube), "youtube", "this is youtube")

        // 세 번째 아이템 추가.
        adapter.addItem(ContextCompat.getDrawable(this, R.drawable.facebook), "facebook", "this is facebook")

        listview.onItemClickListener =
            OnItemClickListener { parent, v, position, id ->
                val item: ListViewItem = parent.getItemAtPosition(position) as ListViewItem
                Toast.makeText(applicationContext, item.title, Toast.LENGTH_LONG).show()
            }
    }
}

 

 

ListViewItem.kt

class ListViewItem() {
    val icon: Drawable? =null
    val title: String? =null
    val desc: String?=null
}

 

 

 

실행결과 java버전과 똑같이 나온다.

 

+ Recent posts