본문 바로가기

Android/Android 핵심기술38

[Android/Kotlin] 어댑터 콜백을 위한 Lambda 함수 전달 # 어댑터 클릭리스너를 람다로 표현하기 어댑터에서 파라미터에 private val onClick : (Flower) -> Unit 이렇게 작성해준다Unit은 반환 유형을 지정하지 않는 경우 기본적으로 Unit이 되고, 코틀린에서 값을 반환하지 않음을 의미한다 그리고 viewHolder에서 init을 사용해서 아이템 클릭리스너를 설정해준다[invoke는 마치 함수인 것처럼 호출할 수 있도록 한다. (Flower) -> Unit를 호출하는 데 사용된다]// 클릭 이벤트(onClick)class FlowersAdapter(var flowerList : List, private val onClick : (Flower) -> Unit) : RecyclerView.Adapter() { // 화면(레이아웃.. 2024. 4. 10.
[Android/Kotlin] Activity, Fragment간 데이터 주고받기 일단 아래와같이 MainActivity에 버튼 두개를 만들고, Frag1버튼을 누르면 FirstFragment로 이동, Frag2버튼 누르면 SecondFragment로 이동하도록 코드는 미리 짜놨고 여기서는 데이터를 전송하고 받는 부분만 작성해볼것이다 # Activity -> Fragment 데이터 전달 newInsatance함수를 따로 만들어서 하는방법과그냥 Bundle을 사용하여 데이터를 전달하는 방법 2가지를 사용해서 해볼것이다 기본적으로 저 버튼들이 MainActivtiy에 있는 버튼들이므로, 저 버튼을 클릭했을때 Fragment로 값을 전달하고, Fragment에서는 값을 받아와서 text로 뿌려주는 작업을 해볼것이다 1) newInsatance함수를 따로 만들어서 하는방법 # Activit.. 2024. 4. 10.
[Android/Kotlin] 세로/가로 모드 ui 분리 구현 # 가로모드 레이아웃 생성하기layout -> New -> Layout Resource File -> File name은 세로모드 이름과 똑같이 써주기 -> orientation -> landscape 이렇게 가로모드 생성해준뒤, 세로모드 레이아웃을 복붙해주고 가로모드에서 이상한 레이아웃들만 수정해주면 쉽게 끝난다! # 트러블 슈팅가로모드로 전환하니깐 갑자기 앱이 종료되는 현상이 발생했다찾아보니깐 엑티비티가 회전될때(가로->세로 / 세로->가로 전환시) onDestory되었다가 onCreate되어서 매번 새로운 UI가 그려지기 때문에, 이때 화면이 재생성되면서 앱이 강제종료 될수있는 문제가 발생한다고 한다따라서 AndroidManifest에가서 모든 엑티비티마다android:configChang.. 2024. 4. 7.
[Android] Fragment간 데이터통신 방식 1. FragmentManager에 Bundle로 Data를 담아 전달//PassBundleFragment는 본인이 전달하고자 하는 Fragment class val bundle = Bundle() bundle.putString("key", "value") val passBundleBFragment = PassBundleBFragment()passBundleBFragment.arguments = bundle parentFragmentManager.beginTransaction() .replace(R.id.fragment_container_bundle, PassBundleFragment()) .commit()-> 데이터를 전송하려는 Fragement에서 작성 override fun onCreateView(.. 2024. 3. 29.
[Android] Fragment Lifecycle 프래그먼트를 사용하면 화면하나를, 독립적으로 작동하는 부분화면 여러개로 구현할 수 있다프레그먼트는 엑티비티처럼 레이아웃을 표시하고, 생명주기를 가지며 입력 이벤트를 받을 수 있다하지만 독립적으로는 존재할 수 없고, 해당 프래그먼트를 관리하는 호스트 액티비티나 프래그먼트 하위에서만 존재할 수 있다 엑티비티는 안드로이드 4대 컴포넌트 중 하나로 안드로이드 시스템에서 관리하지만,프레그먼트는 안드로이드 시스템이 직접 관리하지 않고 FragmentManager가 관리하기 때문에 엑티비티보다 메모리 리소스가 상대적으로 덜 소모된다.또한 한번 작성된 프레그먼트는 여러 액티비티에서 재사용이 가능하며, 따라서 UI 구현에 필요한 작업량을 감소시킬 수 있다 # 프래그먼트 수명 주기 상태 및 콜백 -> 그림을 보면 Fr.. 2024. 3. 29.
[Android] Activity Stack 및 backStack 각 앱마다 원하는 화면흐름이 있기 때문에 태스크 및 백스택 관리를 해야하는 경우가 발생한다이번시간에는 이런 태스크 및 백스택 관리에 대해 정리해볼것이다 실행된 엑티비티들은 기본적으로 task라는 곳에 존재하게 된다task는 사용자와 상호작용하는 엑티비티들을 묶어놓은 모음이다예를 들어 이메일앱에는 새 메시지 목록을 표시하는 활동이 있을 수 있는데, 사용자가 메시지를 클릭하면 해당 메시지를 볼 수 있는 새 활동이 열린다. 그러면 이 새 활동은 백스택에 추가되고, 사용자가 뒤로탭하는 동작을 취하면 새 활동이 종료되고 스택에서 사라지는 걸 볼 수 있다. # 백스택이란?실행된 엑티비티의 인스턴스들은 자료구조의 Stack구조로 저장되어 태스크에 속하게 되는데, 안드로이드 시스템에서는 이 스택을 Back Stack.. 2024. 3. 29.