이번 포스팅에서는 recyclerView Adapter에서 새로운 액티비티를 실행시킬 때, 그 결과값을 받기 위한 방법에 대해 알아보겠습니다.
먼저 액티비티와 recyclerView의 구성은 다음과 같습니다.
- MainActivity
- MainFragment
- RecyclerView
- Button
- (onClick 시) NewActivity
- Button
- RecyclerView
- MainFragment
다소 복잡해보이지만 아주 일반적인 구성입니다. 액티비티 위에 프래그먼트가 있고, 그 프래그먼트 안에 recyclerView를 활용하여 리스트를 띄웁니다. 각각의 리스트 안에 특정 버튼을 눌렀을 때, 새로운 액티비티를 실행하고, 액티비티가 특정 조건에서 finish
될 때(ex. 해당 리스트 삭제) 그 조건 값을 MainFragment에서 인식하여 refresh
하는 방식입니다.
복잡래보여도 천천히 읽어보면 무슨 말인지 이해가 가지 않겠군요.. 쉽게 예시를 들자면 통상 앱에서 볼 수 있는 다음 기능입니다.
상황) 맛집앱에서 리뷰를 작성하여 내 리뷰가 떠있었음.
그 상태에서 내가 작성한 리뷰를 삭제함.
그럼 리뷰가 삭제됨(finish
)과 동시에 맛집 정보가 refresh
되고, 내가 쓴 리뷰는 더이상 보이지 않음.
액티비티와 프래그먼트를 연결하는 작업 등에 대해서는 다루지 않고, 핵심적인 부분들만 간단히 다뤄보겠습니다.
일반적으로 RecyclerViewAdapter
에서 새로운 액티비티를 생성하기 위한 인텐트는 다음과 같습니다.
Intent intent = new Intent(context, NewActivity.class); startActivity(intent); | cs |
이렇게 되면 `NewActivity`가 `finish`되었을 때 리턴값을 받을 수 없기 때문에, `startActivityForResult` 를 사용해야합니다. 그러나 RecyclerView자체에서는 Result를 받을 수 없기 때문에, 프래그먼트를 끌어와서 받게 되는데요. 프래그먼트에서는 자신이 깔려있는 메인 액티비티를 또 끌어와서 받을 수 있습니다. 아래와 같이 말이죠.
Intent intent = new Intent(context, NewActivity.class); ((Activity) context).startActivityForResult(intent, RESULT_CODE); | cs |
여기서 context
는 RecyclerView 어댑터를 생성할 때 끌어온 프래그먼트입니다. 해당 컨텍스에 Activity를 앞에 붙이면, 액티비티를 끌어오게 되는 셈입니다. 따라서 신규 액티비티에서 특정 조건에서 finish
했을 때, 그 값을 MainActivty에서 받아 각각 처리를 할 수 있습니다.
(한가지 설명을 더하자면, NewActivity가 finish되면, MainActivity가 먼저 Resume
되고, 그 후에 MainFragment가 Resume
됩니다. 때문에 OnResume함수를 Override하면 원하는 형태로 코드를 구성할 수 있습니다.)
'Developer > Android, Java' 카테고리의 다른 글
[안드로이드] Firebase Cloud Messaging (FCM) 푸시 메시지에 따라 화면 이동하기 (285) | 2019.05.21 |
---|---|
[안드로이드] EndlessRecyclerViewScrollListener 적용하기 (293) | 2019.05.21 |
[안드로이드] 네이버 지도 API v3 기본맵 띄우기 (281) | 2019.05.20 |
[안드로이드] Retrofit 기본 예제 (서버 통신) (260) | 2019.03.21 |
[안드로이드] EditText 키보드 숨기는 기능 (자동으로 키보드 뜨는 것 방지) (258) | 2019.03.19 |
댓글