- [Android] 개발공부 51일차 TIL - Fragment에서 MainActivity 사용하기, Interface, Fragment Lifecycle (+ UI 업데이트)2024년 01월 31일 12시 06분 45초에 업로드 된 글입니다.작성자: 짧은 코딩끈
일자 : 2024.01.31
📝TIL 정리
💡Fragment에서 MainActivity 사용하기
MainActivity 에서 만든 변수와 함수가 있다.
MainActivity에서 띄우는 Fragment가 관련 변수와 함수를 사용하고 싶을 때 어떻게 해야할까?
MainActivity.kt
var favoriteList = mutableListOf<Document>() fun addFavoriteList(item : Document) { if(!favoriteList.contains(item)) { favoriteList.add(item) } } fun removeFavoriteList(item : Document) { favoriteList.remove(item) favoriteListener?.onFavoriteRemoved(item) }
Fragment에서 사용하고자 하는 액티비티 변수나 함수가 있다면,
소괄호()를 열고 'activity as? 사용할 액티비티명' 작성하고 참조를 하게되면 그 메인액티비티에 있는 변수와 함수가 목록에 뜨게 되면서 참조가 가능하게된다.
Fragment.kt
(activity as? MainActivity)?.favoriteList (activity as? MainActivity)?.addFavoriteList(searchList[position]) (activity as? MainActivity)?.removeFavoriteList(myLockerList[position])
💬Interface(인터페이스)
이번에 과제를 하면서
Interface를 통해 뚫는다(?)라는 개념을 온전히 이해하지 못하여서, 많이 힘들었다.
튜터님께서 이것저것 알려주실때 확실히 인터페이스를 통해 클래스간 액티비티, 프래그먼트간 콜백을 주고 하는것들이 와닿지 않아, 다시 검색, 검색을 해서 설명을 잘해주는 것들만 추려서 기록을 남긴다.
MainActivity.kt
var favoriteList = mutableListOf<Document>() var favoriteListener : OnFavoriteChangeListener? = null // 인터페이스 상속 ... fun removeFavoriteList(item : Document) { favoriteList.remove(item) favoriteListener?.onFavoriteRemoved(item) }
SearchFragment.kt
interface OnFavoriteChangeListener { fun onFavoriteRemoved(item:Document) } ... // 같은 아이템 favorite 삭제 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) (activity as? MainActivity)?.favoriteListener = object : OnFavoriteChangeListener { override fun onFavoriteRemoved(item: Document) { searchListAdapter.searchList.find { it == item }?.isLiked = false searchListAdapter.notifyDataSetChanged() } } } ... override fun onDetach() { super.onDetach() //main에 붙은 메모리 콜백을 해제 (메모리누수 방지, 콜백 지속 방지) (activity as? MainActivity)?.favoriteListener = null }
[Kotlin] 클래스 6—인터페이스(interface), 추상 클래스(abstract class)
Kotlin에서 interface와 abstract class를 정의하고 사용하는 방법과 이들의 특징에 대하여 다룹니다.
medium.com
4장 클래스, 객체, 인터페이스 - Incheol's TECH BLOG
인터페이스 멤버의 경우 final, open, abstract를 사용하지 않는다. 인터페이스 멤버는 항상 열려 있으며 final로 변경할 수 없다. 인터페이스 멤버에게 본문이 없으면자동으로 추상 멤버가 되지만, 그
incheol-jung.gitbook.io
안드로이드 Listener Interface 구현 과정에 대한 이해
도입 안녕하세요. 이동현입니다. 이번에 다루어 볼 내용은 Callback과 Listener입니다. 안드로이드에서는 앱 내의 뷰(Button, EditText등)들과 사용자가 상호작용을 하기 위해 Callback 함수를 정말 많이 사
velog.io
[Koltin] Kotlin식 문법: 클래스, 객체, 인터페이스 -1
이번에 다룰 내용1\. class, interface2\. 뻔하지 않은 constructor와 property3\. data class4\. class delegation5\. object개발자가 한 언어를 다루는 데 걸리는 시간이 대략적으로 2주 정도 걸린다. 어떤
velog.io
💡Fragment Lifecycle
프래그먼트 라이프 사이클을 잘 정리한 글들을 가지고왔다.
거기에 과제로 만든 앱에서
뷰페이저로 2개의 프래그먼트를 왔다갔다 했을때의 로그도 간단히 찍어보았다.
[Android] 프래그먼트 생명주기
이전 포스팅에 이어서 프래그먼트 생명주기를 정리해 보았다. 액티비티와 별개로 자체 생명 주기를 가지고 있지만, 액티비티의 생명주기와 유기적으로 연관되어 있다.프래그먼트가 액티비티에
velog.io
[Android] 의외로 잘 모르는 Fragment 의 Lifecycle
많은 앱들이 여러가지 이유로 single activity application 을 지향하고 있습니다. 따라서 Fragment 로 UI 를 구성하는 경우가 굉장히 많은데요. 이때 많은 개발자들이 Activity 의 Lifecycle 에 대해서는 잘 알고
readystory.tistory.com
⛔Fragment의 RecyclerView UI 업데이트 문제해결
과제를 진행중에 필수과제까지 마무리 짓고
테스트하는 도중에 한가지 문제를 발견했다.
1개의 MainActivity에 2개의 Fragment를 띄웠고
첫번째 Frag에서는 이미지 검색 기능을 두번째 Frag에서는 이미지검색창에서 클릭한 객체 데이터를 보관하는 기능을 구현했다.
문제는 앱 실행후,
첫번째에서 두번째 프래그먼트로 이동후 다시 왔다갔다 반복하게 되었을 때
두번째 프래그먼트의 리사이클러뷰에 새로운 데이터가 반영이 되지 않았다.
원인을 파악한 결과
객체 데이터를 받아서 연결된 어댑터에 데이터를 전달하는 코드가
onViewCreated에서 실행되고 있었다.
라이플사이클에서 프래그먼트가 죽는게 아니라
잠시 화면이 사라졌다 다시 나타나는 경우에는 onPasuse와 onResume이 반복된다.
onViewCreated는 프래그먼트가 생성 되었을 때, 한번 불리기 때문에 (프래그먼트가 죽고 살아나는 경우가 아니라면)
첫번째 프래그먼트에서 아이템을 클릭해서 특정 데이터 객체를 전달해도
두번째 프래그먼트로 이동시 onViewCreated 시점은 발생되지 않는관계로
관련 코드를 onResume에서 실행하도록 하여 해결하였다.
물론 완벽한 해결책은 아니지만, 에러없이 잘 실행되어서 이렇게 마무리 한다.
Fragment.kt
override fun onResume() { super.onResume() myLockerListAdapter.myLockerList = (activity as? MainActivity)?.favoriteList ?: mutableListOf() myLockerListAdapter.notifyDataSetChanged() }
금일 회고
상태:😀
회고:
우여곡절끝에 결국 필수과제까지는 해결했다.
정말 특정 부분에서 시간을 엄청 많이 잡아 먹게 되어서,, 아쉬웠다.
대충 이해하고 넘어가게 되면, 더 큰 어려움이 닥치게 된다는것을 깨닫게 되었다.
이제 내일부터 선택과제를 진행하려고 한다
할 수 있는거 부터 차근차근
'개발공부 > 일지' 카테고리의 다른 글
[Android] 개발공부 53일차 TIL - Fragment 생명주기(UI업데이트 시점, 데이터 덮어쓴 문제) , MVVM (0) 2024.02.02 [Android] 개발공부 52일차 TIL - SharedPreferences 객체 저장(Gson) (0) 2024.02.01 [Android] 개발공부 50일차 TIL - Fragment->Activity 데이터전달 (0) 2024.01.30 [Android] 개발공부 49일차 TIL - DateTime format, Glide 사용하기 (0) 2024.01.29 [Android] 개발공부 48일차 TIL - coroutine, 키보드내리기(숨기기), SharedPreferences(클래스) (0) 2024.01.26 다음글이 없습니다.이전글이 없습니다.댓글