TIL

TIL 55일차- 최종프로젝트

김태준(Android_3기) 2024. 6. 7. 19:56

트러블슈팅 (까지는 아니고 수정사항...)

버튼이 정상적으로 눌리지 않는 문제

원인 : 레이아웃 파일을 보면 CardView 안에 ImageButton이 들어가 있는 형태이다

    <com.google.android.material.card.MaterialCardView
        android:id="@+id/cd_search_transportation_public"
        android:layout_width="80dp"
        android:layout_height="80dp"
        app:cardBackgroundColor="@color/white"
        android:elevation="2dp"
        app:cardCornerRadius="3dp"
        app:strokeColor="@color/black"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tv_search_transportation_title"
        android:layout_marginStart="70dp"
        android:layout_marginTop="35dp" >

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <androidx.appcompat.widget.AppCompatImageButton
                android:id="@+id/btn_search_transportation_public"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="@drawable/ic_bus_24dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent" />

        </androidx.constraintlayout.widget.ConstraintLayout>
    </com.google.android.material.card.MaterialCardView>

 

하지만 setOnClickListener를 cardView에만 달아줘서 상위 view인 ImageButton가 cardView를 가리면서 생기는 문제였다.

    private fun initView(){
        binding.apply {
            cdSearchTransportationCar.setOnClickListener {
                viewModel.getParkingData()
                binding.cdSearchTransportationCar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.neomint))
                binding.cdSearchTransportationPublic.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white))
            }
            btnSearchTransportationCar.setOnClickListener {
                viewModel.getParkingData()
                binding.cdSearchTransportationCar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.neomint))
                binding.cdSearchTransportationPublic.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white))
            }
            cdSearchTransportationPublic.setOnClickListener {
                viewModel.usePublic()
                binding.cdSearchTransportationPublic.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.neomint))
                binding.cdSearchTransportationCar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white))
            }
            btnSearchTransportationPublic.setOnClickListener {
                viewModel.usePublic()
                binding.cdSearchTransportationPublic.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.neomint))
                binding.cdSearchTransportationCar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white))
            }
            tvSearchTransportationNext.setOnClickListener {
                val searchPeopleFragment = SearchPeopleFragment()
                val transaction = parentFragmentManager.beginTransaction()
                transaction.replace(R.id.fr_main, searchPeopleFragment)
                transaction.addToBackStack(null)
                transaction.commit()
            }
        }
    }

 

위 코드와 같이 cardView와 ImageButton 둘 다 setOnClickListener를 달아줘서 해결했다. 추가로 사용자가 선택된 버튼이 무엇인지 알 수 있도록 setBackgroundColor 설정도 해줬다