728x90
리스트뷰를 사용하기 위해서는 어댑터 클래스를 선언해주어야한다.
또한 리스트뷰에 들어갈 레이아웃 xml도 생성해준 뒤 이를 연결시켜야한다.
.
kotlin으로 찾아보면 리스트뷰보다도 리사이클러뷰가 많았는데
Realm과 관련된 정보가 많지 않아 리스트뷰를 택했고, 리스트뷰로 충분히
원하는 것을 구현가능하다고 생각했다.
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.example.whisperapp.todo.Todo
import io.realm.OrderedRealmCollection
import io.realm.RealmBaseAdapter
class ListAdapter(realmResult: OrderedRealmCollection<Todo>)
: RealmBaseAdapter<>(realmResult){//RealmBaseAdapter 상속
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val vh: ViewHolder
val view: View
if(convertView==null){
//xml 레이아웃 파일을 불러와서 뷰로 전환시킴
view= LayoutInflater.from(parent?.context).inflate(R.layout.item,parent, false)
vh=ViewHolder(view)
view.tag=vh
}else{
view=convertView
vh=view.tag as ViewHolder
//view.tag는 Any형이므로 ViewHolder 타입으로 형변환
}
if(adapterData!=null){
val item=adapterData!![position]
vh.textTextView.text=item.title
vh.subTextView.text=item.subtitle
vh.dateTextView.text = android.text.format.DateFormat.format("yyyy/MM/dd", item.date)
}
return view
}
override fun getItemId(position: Int): Long {
if (adapterData!= null) {
return adapterData!![position].id
// adapterView가 Realm 데이터를 가지고 있으므로
// 해당 위치의 id를 반환해줘야 함
}
return super.getItemId(position)
}
}
class ViewHolder(view: View) {
val dateTextView: TextView = view.findViewById(R.id.text1)
val textTextView: TextView = view.findViewById(R.id.text2)
val subTextView: TextView = view.findViewById(R.id.text3)
}
리스트뷰를 나타내는 액티비티에 아래 코드를 추가해주어야한다.
val adapter = TodoListAdapter(realmResult) // 할 일 목록이 담긴 어댑터 생성
listView.adapter = adapter // 어댑터 지정 (이 때 목록이 출력됨)
728x90
'Android > Kotlin' 카테고리의 다른 글
Kotlin Realm DB 사용시 발생한 오류 해결하기 (0) | 2021.02.03 |
---|---|
SQLite에서의 데이터 베이스 구축 (0) | 2021.01.28 |
Kotlin 실로폰 만들기 (0) | 2021.01.25 |
Kotlin 수평측정기 만들기 (0) | 2021.01.22 |
Kotlin 나만의 웹브라우저 만들기 (0) | 2021.01.22 |