MOBILE PROGRAMING 20

[모바일프로그래밍] Safe Args (Fragment 간 데이터 전달)

1. Safe Args (Fragment 간 데이터 전달)Navigation Component의 Safe Args 플러그인을 사용하여 Fragment 간에 데이터를 안전하게 전달1.1. 사전 설정 (Gradle) Safe Args 플러그인을 사용하기 위해 build.gradle 파일 수정 필요.Project 수준 build.gradlebuildscript { dependencies { val nav_version = "2.9.6" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") }}App 수준 build.gradleplugins { id("androidx.navigat..

MOBILE PROGRAMING 2025.11.24

[모바일 프로그래밍] Listener를 이용한 두 프래그먼트 간의 통신

실습 목표 및 내용텍스트 전달 앱: Fragment A의 EditText에 텍스트를 입력하고 "OK" 버튼을 누르면 해당 텍스트가 Fragment B의 EditText(혹은 TextView)에 표시됩니다. 이 통신은 양방향으로 구현됩니다.카운터 앱: Fragment A의 "Inc." 버튼을 클릭할 때마다 Fragment B에 있는 "Count" 값이 1씩 증가합니다.1. 텍스트 전달 앱: Interface를 이용한 통신이 실습에서는 Interface(인터페이스)를 사용하여 프래그먼트와 액티비티 간의 통신을 구현데이터 흐름은 [Fragment A] → [Activity] → [Fragment B] 순서1. 송신 측 (Fragment A)리스너 인터페이스 정의: 데이터를 보내는 Fragment A 내부에 리..

MOBILE PROGRAMING 2025.11.17

[모바일 프로그래밍] 프래그먼트 간 통신 실습

실습 목표: Fragment A와 Fragment B 간에 데이터를 주고받는 앱 구현.통신 방식: 'Using Activity' (액티비티를 이용한 방식) 채택. 호스팅 액티비티가 두 프래그먼트 사이의 중개자 역할을 수행.UI 구성:하나의 MainActivity가 Fragment A와 Fragment B를 모두 포함.각 프래그먼트는 텍스트를 입력받는 공간(EditText)과 'OK' 버튼을 가짐.데이터 흐름 (Fragment A → Activity):Fragment A는 getActivity()를 사용해 호스팅 액티비티의 참조를 획득.'OK' 버튼 클릭 시, Fragment A는 획득한 액티비티 참조를 통해 액티비티에 구현된 특정 함수(예: onReceivedFromFragA)를 호출하며 데이터를 전달...

MOBILE PROGRAMING 2025.11.12

[모바일 프로그래밍] Fragment와 생명 주기 + 실습

디자인 철학 및 특징 (Design Philosophy & Characteristics)도입 배경: Android 3.0 (API level 11)에서 태블릿과 같은 큰 화면에서 동적이고 유연한 UI 디자인을 지원하기 위해 도입정의: 하나의 유저 화면을 여러 개로 나누거나 2, 액티비티의 레이아웃을 여러 개의 조각으로 나눔호스팅 액티비티: 프래그먼트는 호스팅 액티비티와 연결되어 있음구성 요소: 각 프래그먼트는 다음을 가짐:자신만의 레이아웃자신만의 라이프사이클과 콜백 함수호스트 액티비티의 라이프사이클과 연동됨호스팅 액티비티가 관리하는 백 스택제공하는 기능:모듈성 (Modularity): 액티비티의 레이아웃을 프래그먼트로 나눔재사용성 (Reusability): 여러 액티비티에서 공유 가능적응성 (Adapta..

MOBILE PROGRAMING 2025.11.05

[모바일 프로그래밍] 암시적 Intent와 액티비티 생명 주기

1. 인텐트(Intent) 이해 - 인텐트는 안드로이드 컴포넌트 간의 통신 수단이며, 명시적 인텐트와 암시적 인텐트로 나뉨. 1. 명시적 인텐트 (Explicit Intent)정의: 실행할 컴포넌트(예: 액티비티)를 클래스 참조 정보(::class.java)로 명확하게 지정함.동작: 시스템은 인텐트의 클래스 정보 와 매니페스트에 등록된 액티비티의 이름(name=) 을 직접 비교하여 해당 컴포넌트를 실행함.예시 코드: SecondActivity를 직접 지정하여 실행.val mIntent: Intent = Intent(applicationContext, SecondActivity::class.java)startActivity(mIntent)매니페스트 등록 예시:2. 암시적 인텐트 (Implicit Inte..

MOBILE PROGRAMING 2025.11.03

[모바일 프로그래밍] Activity와 Intent(양방향)

1. 액티비티 간 양방향 데이터 전달 (Activity Result API)Activity Result API를 이용하여 액티비티 간 양방향 데이터 전달을 구현함.실행 흐름은 크게 Part 1 (SecondActivity 실행)과 Part 2 (데이터 회신)로 구성됨.Part 1: ActivityResultLauncher 실행 (MainActivity)1. ActivityResultLauncher 객체 생성 (호출 측)에서 registerForActivityResult()를 이용해 ActivityResultLauncher 객체를 생성하고 초기화.이때 실제 작업자인 Contract 객체와, 결과 수신 시 호출될 콜백(callback) 메소드를 등록.val requestLauncher: ActivityRes..

MOBILE PROGRAMING 2025.10.29

[모바일 프로그래밍] Activity와 Intent(단방향)

1. 안드로이드 앱의 주요 구성 요소: 액티비티 (Activity)액티비티는 안드로이드 앱에서 사용자가 상호작용하는 하나의 UI(사용자 인터페이스) 화면을 의미앱은 여러 개의 액티비티로 구성될 수 있음예를 들어, 이메일 앱은 '이메일 목록을 보여주는 액티비티', '새 이메일을 작성하는 액티비티', '선택한 이메일을 읽는 액티비티' 등으로 나뉠 수 있음2. 안드로이드 앱의 주요 구성 요소: 인텐트 (Intent)- 인텐트는 한 액티비티에서 다른 액티비티를 호출할 때 필요한 핵심 요소- 이는 액티비티 간에 데이터를 전달하는 '메신저' 역할을 수행주요 기능:다른 컴포넌트에게 특정 동작을 요청하거나 이벤트가 발생했음을 알림액티비티를 호출할 때, 호출 대상이 되는 액티비티를 명시대상 액티비티에게 데이터를 전달하는..

MOBILE PROGRAMING 2025.10.23

[모바일 프로그래밍] 토스트(Toast)와 대화 상자(AlertDialog)

1. 토스트 (Toast)- 토스트는 화면에 잠시 나타났다가 사라지는 간단한 메시지 토스트 생성Toast.makeText() 함수를 사용하여 토스트를 생성함.주요 makeText() 함수:open static fun makeText(context: Context!, text: CharSequence!, duration: Int): Toast! open static fun makeText(context: Context!, resld: Int, duration: Int): Toast! Duration (지속 시간): Toast.LENGTH_LONG: 긴 시간 동안 보임.Toast.LENGTH_SHORT: 짧은 시간 동안 보임.토스트를 화면에 표시하려면 반드시 toast.show()를 호출해야 함.토스트 기타..

MOBILE PROGRAMING 2025.10.20

[모바일 프로그래밍] 메뉴 (Option Menu & Context Menu)

옵션 메뉴 (Option Menu)옵션 메뉴는 액티비티의 주 메뉴로, 보통 앱 바(App Bar)에 표시XML을 이용한 생성 과정 메뉴 XML 파일 생성: - res/menu 폴더에 메뉴 항목을 정의하는 XML 파일을 생성- 각 메뉴 항목은 태그를 사용하며, id와 title 속성을 가짐override fun onCreateOptionsMenu(menu: Menu?): Boolean { super.onCreateOptionsMenu(menu) val menuInflater: MenuInflater = getMenuInflater() menuInflater.inflate(R.menu.menu_xml_file, menu) return true}onCreateOptionsM..

MOBILE PROGRAMING 2025.10.13

[모바일 프로그래밍] ConstraintLayout와 Flow

1. ConstraintLayoutConstraintLayout은 위젯에 여러 **제약(constraint)**을 적용해 위치와 크기를 결정하는 레이아웃. 각 위젯의 경계선을 다른 위젯이나 부모 레이아웃에 연결하는 방식으로 UI를 구성함. 1. 상대적 위치 지정 (Relative Positioning)- 위젯의 상하좌우(top, bottom, left, right) 및 기준선(baseline)을 다른 대상에 연결해 위치를 정함.기본 형식: app:layout_constraint[자신위치]_to[상대방위치]Of="@+id/대상ID".주요 예시:app:layout_constraintLeft_toRightOf="@+id/btnA": 현재 위젯의 왼쪽을 btnA의 오른쪽에 맞춤.app:layout_constra..

MOBILE PROGRAMING 2025.10.06