안드로이드 뷰 바인딩
buildFeatures {
viewBinding true
}
gradle 파일에 위와 같이 작성
val binding = FragmentBoardBinding.inflate(inflater, container, false)
onCreateView에 binding 변수를 만들어 준다
lateinit var binding: FragmentBoardBinding
혹은 class 위치에 전역 변수로 선언
* 보통 변수는 선언과 동시에 초기화를 해 줘야 하지만, lateinit를 사용할 경우 나중에 초기화가 가능(성능향상에 도움)
뷰 바인딩을 통해 findViewById 대신 binding.<id>로 객체를 쉽게 찾을 수 있다
코드의 길이가 줄어드는 편리한 점도 있지만, 바인딩 된 뷰에서만 객체를 찾기 때문에 findViewById를 사용하는 것에 비해 실수할 가능성이 줄어든다
리사이클러뷰 만들기
우선 새 xml 파일에 리사이클러뷰에 들어갈 아이템의 틀을 만들어 준다
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/boardBar"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/postingList"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/posting_list_view"
/>
</ScrollView>
그 후 메인 xml 파일에 위와 같이 리사이클러뷰를 추가해 준다
tools:listitem="@layout/" 부분에 아까 만든 xml 파일명을 넣어주면 된다
새 데이터 클래스를 생성해주고,
data class BoardItem(
val title: String,
val content: String
)
위와 같이 사용할 변수들을 작성해준다
다음으로 어댑터를(Kotlin Class) 하나 생성해 준 다음
class BoardAdapter(private val itemList: ArrayList<BoardItem>) :
RecyclerView.Adapter<BoardAdapter.BoardViewHolder>(){
inner class BoardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val boardTitle: TextView = itemView.findViewById<TextView>(R.id.postListTitle)
val boardContent: TextView = itemView.findViewById<TextView>(R.id.postListPV)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BoardViewHolder {
val view = LayoutInflater.from(parent.context).inflate(
R.layout.posting_list_view, parent, false)
return BoardViewHolder(view)
}
override fun onBindViewHolder(holder: BoardViewHolder, position: Int) {
holder.boardTitle.text = itemList[position].title
holder.boardContent.text = itemList[position].content
}
override fun getItemCount(): Int {
return itemList.count()
}
}
위와 같이 코드를 작성해 준다
메인 Fragment로 다시 돌아와서,
val itemList = ArrayList<BoardItem>()
클래스 내에 아이템 리스트 변수를 선언하고
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.postingList.adapter = BoardAdapter(itemList)
binding.postingList.layoutManager = LinearLayoutManager(
context, LinearLayoutManager.VERTICAL, false)
}
onViewCreated 함수 내에 아까 만든 어댑터와 연결하고, 레이아웃 매니저도 지정해 준다
임시로 데이터를 추가해서 확인해 보기 위해 데이터 추가 용도의 함수를 하나 만들고,
itemList.add(BoardItem("<title>","<content>"))
위 함수를 사용해 테스트용 데이터를 몇 개 추가해보고 뷰가 잘 나오는지 확인하면 된다
'Programing > Android(Kotlin)' 카테고리의 다른 글
[Android/Kotlin] 액티비티 이동, 데이터 전달 (0) | 2023.08.29 |
---|---|
[카카오맵 API/Kotlin] 앱에 지도 화면 띄우기 (0) | 2023.08.25 |
[Udemy] 퀴즈 앱(Android 및 Kotlin 개발 완전 정복) (0) | 2023.07.21 |
[Udemy] 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.07.12 |
[Udemy] 분 단위 나이 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.06.26 |