연습장/실습

5주차_ 짝퉁마켓 앱 2. 다이얼로그 & OnBackPressedCallback

아이른 2024. 4. 16. 10:16

 

문제 1. 

  • [①] 디자인 및 화면 구성을 최대한 동일하게 해주세요. (사이즈 및 여백도 최대한 맞춰주세요.) ✨
  • [⑦] 상품 데이터는 dummy data 를 사용합니다. (더미 데이터는 자유롭게 추가 및 수정 가능)
  • [⑤] RecyclerViewer를 이용해 리스트 화면을 만들어주세요.
  • [⑤-①] 상단 툴바를 제거하고 풀스크린 화면으로 세팅해주세요. (상태바(시간/배터리 표시하는 최상단바)는 남기고)
  • [②] 상품 이미지는 모서리를 라운드 처리해주세요.
  • [③] 상품 이름은 최대 두 줄이고, 그래도 넘어가면 뒷 부분에 …으로 처리해주세요.
  • [①] 뒤로가기(BACK)버튼 클릭시 종료하시겠습니까? [확인][취소] 다이얼로그를 띄워주세요.
  • [ ] 상단 종모양 아이콘을 누르면 Notification을 생성해 주세요. (예시 비디오 참고)
  • [⑥] 상품 가격은 1000단위로 콤마(,) 처리해주세요.
  • [④] 상품 아이템들 사이에 회색 라인을 추가해서 구분해주세요.
  • [ ] 상품 선택시 아래 상품 상세 페이지로 이동합니다.
  • [ ] 상품 상세페이지 이동시 intent로 객체를 전달합니다. (Parcelize 사용)

1. 다이얼로그

  • 사용자에게 결정을 내리거나 추가정보를 입력하라는 메시지를 표시하는 작은 창
  • AlertDialog클래스를 사용하면 여러 가지 대화 상자 디자인을 빌드
  • 알림창의 아이콘, 제목, 내용을 지정하는 함수
    • setIcon()
    • setTitle()
    • setMessage()
  • 알림창의 버튼을 지정하는 함수
    • setPositiveButton(버튼의 문자열, 버튼 클릭 시 이벤트) : 긍정
    • setNegativeButton(버튼의 문자열, 버튼 클릭 시 이벤트) : 부정
    • setNeutralButton(버튼의 문자열, 버튼 클릭 시 이벤트) : 중립
    • 버튼 클릭 시 처리내용 없으면 null
    • 버튼은 최대 3개까지 추가

 

2. OnBackPressedCallback()

  • OnBackPressed
    • 엑티비티에서 뒤로 가기 버튼에 대한 행동을 제어할 때 사용
    • API 33 부터 미사용 > OnBackPressedCallback 사용 권고
  • OnBackPressedCallback() 사용법
private val callback = object : OnBackPressedCallback(true){
    override fun handleOnBackPressed() {
    //뒤로가기 이벤트 처리
    }
}

..

onBackPressedDispatcher.addCallback(this, callback)
//호출

 

 뒤로가기(BACK)버튼 클릭시 종료하시겠습니까? [확인][취소] 다이얼로그를 띄우기

 

class MainActivity : AppCompatActivity() {

    private val callback = object : OnBackPressedCallback(true){
        override fun handleOnBackPressed() {

            val builder = AlertDialog.Builder(this@MainActivity)
            //context: 추상객체(사용되는 곳에서 상태가 바뀜) = 정의된 게 없어 직접 연결
            builder.setTitle("종료")
            builder.setMessage("정말 종료하시겠습니까?")
            builder.setIcon(R.drawable.baseline_av_timer_24)
           
            val listener = DialogInterface.OnClickListener { dialog, whice ->
               if (whice == DialogInterface.BUTTON_POSITIVE) {
               //버튼 식별자
                  finish()
                }
            }

            builder.setPositiveButton("확인", listener)
            builder.setNegativeButton("취소", null)
            builder.show()
        }
    }

    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

...

        onBackPressedDispatcher.addCallback(this, callback)
    }
}