내일배움캠프 33일차

김재현·2024년 4월 12일
post-thumbnail

프래그먼트의 데이터 전달

  • 액티비티는 intent를 통해 데이터를 전달했다면 프래그먼트는 어떻게 데이터를 전달하는지 알아보자.

1. Activity -> Fragment

  • 액티비티에서 프래그먼트로 데이터를 전달할 때는 프래그먼트의 인스턴스를 생성하고 newInstance 메소드를 통해 데이터를 전달합니다. Bundle 객체를 사용하여 데이터를 프래그먼트의 인자(arguments)로 설정하고 이 인자를 프래그먼트가 받아서 사용합니다.

MainActivity (보내는 코드)

  • btnFrag1와 btnFrag2 클릭리스너 안에 각 프래그먼트의 인스턴스를 생성하고 newInstance 메소드에 데이터를 전달하여 프래그먼트를 설정해준다.

First, Second Fragment (받는 코드)

  • newInstance 메소드에서 전달받은 데이터를 Bundle에 담고 프래그먼트의 인자로 설정한다. onViewCreated 함수를 만들고 인자로 받은 데이터를 레이아웃의 텍스트 뷰와 연결시켜준다.

결과


2. Fragment -> Fragment

  • 프래그먼트 간 데이터 전달은 액티비티에서 프래그먼트로 데이터를 전달하는 방식과 비슷하다.

FirstFragment (보내는 코드)

  • 버튼 클릭시 SecondFragment의 새 인스턴스를 생성하고 newInstance 메소드를 사용하여 데이터를 전달한 후 프래그먼트 트랜잭션을 통해 두 번째 프래그먼트를 시작한다.

SecondFragment (받는 코드)

  • newInstance 메소드로 전달받은 데이터를 Bundle에 담고 onViewCreated에서 Bundle로부터 데이터를 추출하여 사용합니다. (onViewCreated에서 말고 onCreate에서도 가능!)
    액티비티에서 프래그먼트로 데이터를 전달할 때와 받는 코드는 동일하다.
  • Fragment1 -> Fragment2
  • Fragment2 -> Fragment1

3. Fragment -> Activity

  • 프래그먼트에서 액티비티로 데이터를 보낼때는 FragmentDataListener 인터페이스가 프래그먼트가 액티비티에 붙을 때 onAttach 액티비티가 이 인터페이스를 구현했는지 확인합니다. 버튼 클릭 리스너에서 onDataReceived 메소드를 호출하여 데이터를 액티비티에 전달합니다.

SecondFragment (보내는 코드)

  • 인터페이스와 변수 listener를 정의해주고
  • onAttach 상태가 되면 MainActivity의 context와 FragmentDataListener의 타입체크를 통해 MainActivity에 onDataReceived가 있는지 확인하고(?) 둘을 연결시켜준다.
  • 버튼 클릭 리스너를 통해 버튼을 누르면 dataSend 안의 String 값을 MainActivity로 보내준다.

MainActivity (받는 코드)

  • 인터페이스 FragmentDataListener를 상속받아주고
  • SecondFragment에서 보내준 데이터를 받아 메세지로 출력시켜줬다.

다이얼로그

  • 다이얼로그는 사용자에게 결정을 내리거나 추가정보를 입력하라는 메세지를 표시하는 작은 창이다.

  • 다이얼로그는 제목, 콘텐츠 영역, 작업 버튼 세 가지 영역이 있다.

    • 1). 제목
    • 선택 사항이며 콘텐츠 영역에 상세한 메시지, 목록 또는 맞춤 레이아웃이 채워져 있는 경우에만 사용해야한다. 간단한 메시지 또는 질문을 나타내는 경우는 없어도 된다.
    • 2). 콘텐츠 영역
      • 메시지, 목록 또는 다른 맞춤 레이아웃을 표시 할 수 있다.
    • 3). 작업 버튼
      • 대화 상자 하나에 작업 버튼이 세 개를 초과하면 안된다.


출처 : 내일배움캠프

기본 다이얼로그(AlertDialog)


  • 버튼 클릭마다 Title textView가 바뀐다.

커스텀 다이얼로그(CustomDialog)



  • 입력한 값에 따라 Title이 바뀐다

날짜 다이얼로그(DatePickerDialog)

  • calendar 변수에 담긴 인스턴스로 현재 날짜를 가져오고 var picker로 현재 날짜를 출력해준다.

  • 마찬가지로 날짜를 선택하면 Title로 표시된다.

시간 다이얼로그(TimePickerDialog)

  • 날짜 다이얼로그와 마찬가지로 Calendar.getInstance()로 현재 시간을 가져온다.
  • 시간을 먼저 선택하고
  • 분을 선택한 뒤 확인을 누르면
  • 선택한 시간으로 Title이 바뀐 것을 확인할 수 있다.

진행 다이얼로그(ProgressDialog)

  • 진행 다이얼로그는 권장 방식으로 해보았다. 커스텀처럼 layout을 만들어줘야한다.

  • 실행시 다음과 같이 나타난다.

DialogFragment

  • DialogFragment는 안드로이드에서 대화상자 형태의 UI를 구현할 때 사용한다.

MyDialogFragment

  • DialogFragment는 onCreateDialog 메서드를 오버라이드 하여 AlertDialog를 생성하고 구성한다.

MainActivity

  • MainActivity에서는 버튼 클릭시 MyDialogFragment를 표시하게 설정해주고 show 메서드는 FragmentManager와 대화상자의 태그를 인자로 받는다.
  • Yes나 No에 다른 동작을 추가하지 않아 눌러도 변화는 없다.

알림

  • 휴대폰을 사용할때 앱과 관련된 정보를 보여주는 알림은 터치하여 해당 앱을 열 수도 있고 사진이나 내용을 보여줍니다. 단말기 상단 부분에 표시되고 앱 아이콘의 배지로도 표시합니다.
  • 코드를 작성하고 알림을 보내보았다.
  • 다 어렵지만 알림은 너무 어려워서 조금 더 공부해봐야겠다.

하루의 마무리

  • 오늘은 강의 내용 정리해보았고 이제 스탠다드반 과제하러 가야겠다!

0개의 댓글