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로 해줍니다.
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 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>