Apple is Apple
article thumbnail

일일회고

 

오늘까지 해서 선발대 과제에 대한 개념정리를 해보았다.

 

정리를 하면서 공식문서, 블로그등 많은 자료를 찾아보면서 복습도하고 새로운 내용도 공부할 수 있었다.

 

내일은 입문 개인과제 제출 마감일이니까 마지막으로 한번 더 확인해 본 후  알고리즘 위주로 공부를 해봐야겠다.

 

(오랜만에 백준..?)


오늘의 키워드

  • 알고리즘
  • RecyclerView
  • FloatingActionButton

알고리즘

포스팅으로 대체

 

[programmers] [Kotlin] 숫자 문자열과 영단어

문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자

aaapple.tistory.com

선발대 과제 개념 정리

RecyclerView

 

[Android] RecyclerView

android jetpack 구성요소 중 하나이다. 대량의 데이터를 동적, 효율적으로 보여주기 위한 뷰 레이아웃이다. 기존에 같은방식으로 뷰를 나타내는 ListView가 있다. 그렇다면 왜 ListView가 아니라 RecyclerVI

aaapple.tistory.com

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) 화면을 스크롤해도 플로팅 버튼은 움직이지 않음 

출처: Android developer

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을 클릭했을 떄 실행할 동작 정의
}
profile

Apple is Apple

@mjjjjjj