Custom Dialog

BongKu·2023년 7월 31일
0

Android

목록 보기
15/30
post-thumbnail

1. 커스텀 다이얼로그 클래스파일 생성

class MarkerInfoDialog(
    context: Context,
    private val name: String,
    private val address: String,
    private val visitNum: Int,
    private val rating: Int,
    private val callback: (String) -> Unit
) : Dialog(context) {
    
    private lateinit var binding: DialogInfoMarkerBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DialogInfoMarkerBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        initView()
    }

    private fun initView() {
        setCancelable(false)
        
        binding.run {
            cancelBtn.setOnClickListener {
                callback("N")
                dismiss()
            }
            okBtn.setOnClickListener {
                callback("Y")
                dismiss()
            }
            restaurantName.text = name
            restaurantLocation.text = address
            restaurantVisitNum.text = "방문 ${visitNum.toString()}회"
            restaurantRating.text = "평점 ${rating.toString()}점"
        }
    }
}

클래스 생성자를 콜백으로 받아 메세지를 전달할 수 있습니다.
다이얼로그가 화면에 떴을 때, 다른 화면을 눌렀을 때 사라지지 않도록 setCancelable은 false로 해줍니다.

2. 다이얼로그 생성

 		private fun showMarkerInfoDialog() {
            val dialog = MarkerInfoDialog(
                requireContext(),
                selectedRestaurantInfo.restaurant_name,
                selectedRestaurantInfo.restaurant_address,
                selectedRestaurantInfo.visit_num,
                selectedRestaurantInfo.rating
            ) { message ->
                if (message == "Y") {
                    insertDB(selectedRestaurantInfo.restaurant_name)
                } else {
                    removeMarker()
                }
            }
            dialog.show()
 		}

xml 파일

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/restaurant_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="가게 이름"
        android:textAppearance="@style/TextStyle15sp"/>
    <TextView
        android:id="@+id/restaurant_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/restaurant_name"
        android:text="광진구 화양동 -"
        android:textAppearance="@style/TextStyle15sp"/>
    <TextView
        android:id="@+id/restaurant_visit_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/restaurant_location"
        android:text="방문 0회"
        android:textAppearance="@style/TextStyle15sp"/>
    <TextView
        android:id="@+id/restaurant_rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/restaurant_visit_num"
        android:text="평점 0점"
        android:textAppearance="@style/TextStyle15sp"/>
    <Button
        android:id = "@+id/cancel_btn"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="취소"
        android:textAppearance="@style/TextStyle15sp"
        app:layout_constraintTop_toBottomOf="@id/restaurant_rating"
        app:layout_constraintEnd_toStartOf="@id/ok_btn"
        app:layout_constraintStart_toStartOf="parent"/>
    <Button
        android:id = "@+id/ok_btn"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="방문"
        android:textAppearance="@style/TextStyle15sp"
        app:layout_constraintStart_toEndOf="@id/cancel_btn"
        app:layout_constraintTop_toBottomOf="@id/restaurant_rating"
        app:layout_constraintEnd_toEndOf="parent"/>


</androidx.constraintlayout.widget.ConstraintLayout>

결과

profile
화이팅

0개의 댓글