일일회고
오늘까지 해서 선발대 과제에 대한 개념정리를 해보았다.
정리를 하면서 공식문서, 블로그등 많은 자료를 찾아보면서 복습도하고 새로운 내용도 공부할 수 있었다.
내일은 입문 개인과제 제출 마감일이니까 마지막으로 한번 더 확인해 본 후 알고리즘 위주로 공부를 해봐야겠다.
(오랜만에 백준..?)
오늘의 키워드
- 알고리즘
- RecyclerView
- FloatingActionButton
알고리즘
포스팅으로 대체
선발대 과제 개념 정리
RecyclerView
RecyclerView 기본 적용 방식대로 ToDoFragment에 RecyclerView와 BookmarkedToDoFragment의 RecyclerView에 아이템까지 적용을 시켜보았다.
[ ToDoFragment.kt ]
더보기
class ToDoFragment : Fragment() {
private var binding: FragmentToDoBinding? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentToDoBinding.inflate(layoutInflater)
initRecyclerView()
return binding?.root
}
// 리사이클러뷰 설정
private fun initRecyclerView() = binding?.let {
with(it) {
// 더미 데이터
val list = mutableListOf<String>()
(0..30).forEach { idx ->
list.add("${getString(R.string.to_do)} ${idx + 1}")
}
// 어댑터 연결
toDoRecyclerView.adapter = ToDoAdapter(list)
// 레이아웃 매니저 연결
toDoRecyclerView.layoutManager = LinearLayoutManager(requireContext())
}
}
override fun onDestroyView() {
super.onDestroyView()
binding = null
}
}
[ ToDoAdapter.kt ]
더보기
class ToDoAdapter(
// 액티비티로 부터 받은 데이터 셋
private val data: List<String>
) : RecyclerView.Adapter<ToDoAdapter.ToDoViewHolder>() {
// 아이템 뷰를 만들기 위한 뷰홀더 생성 함수
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ToDoViewHolder {
Log.i(TAG, "onCreateViewHolder - ToDo")
return ToDoViewHolder(
ItemToDoBinding
.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
// 받은 데이터셋의 크기
override fun getItemCount(): Int = data.size
// 위치에 따른 뷰홀더 데이터 바인딩 함수
override fun onBindViewHolder(holder: ToDoViewHolder, position: Int) {
Log.i(TAG, "onBindViewHolder - ToDo $position")
holder.bind(data[position])
}
// 아이템을 보여줄 뷰홀더 클래스
inner class ToDoViewHolder(private val binding: ItemToDoBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(data: String) {
binding.textViewToDo.text = data
}
}
companion object {
const val TAG = "ToDoAdapter"
}
}
BookMarkedFragment와 BookMarkedAdapter는 ToDo에서 이름만 수정해서 똑같은 형식으로 구현해 놓았다.
FloatingActionButton
화면에 직접적으로 바인딩되어있지 않고 독자적으로 화면 위에 떠있는 버튼이다.
ex) 화면을 스크롤해도 플로팅 버튼은 움직이지 않음
button.xml
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@drawable/ic_my_icon"
android:contentDescription="@string/submit"
android:layout_margin="16dp" />
다양한 속성을 활용하여 커스텀할 수 있다.
control by kotlin
val fab: View = findViewById(R.id.fab)
fab.setOnClickListener { view ->
// FloatingAction Butoon을 클릭했을 떄 실행할 동작 정의
}
'내일배움캠프 7기 > TIL' 카테고리의 다른 글
내일배움캠프 7기 Android TIL 22일차 (2023.08.14) (0) | 2023.08.14 |
---|---|
내일배움캠프 7기 Android TIL 21일차 (2023.08.11) (0) | 2023.08.11 |
내일배움캠프 7기 Android TIL 19일차 (2023.08.09) (0) | 2023.08.09 |
내일배움캠프 7기 Android TIL 18일차 (2023.08.08) (0) | 2023.08.08 |
내일배움캠프 7기 Android TIL 17일차 (2023.08.07) (0) | 2023.08.07 |