반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
Fragment는 Activity위에 올라가는 SubActivity 같은 느낌입니다.
때문에 Fragment는 Activity에 존재하는 onBackPressed() 메소드가
별도로 존재하지 않습니다.
그러면 Fragment에서 뒤로가기 버튼을 눌렀을 때 부모 Activity의
onBackPressed() 메소드가 실행되는 게 아니라 별도로 기능을
추가하고 싶을 경우에는 어떻게 해야 할까요?
방법은 간단합니다. 먼저 인터페이스를 하나 만들어 줍니다.
package superbrain.rowan.com.dementiadata.fragment;
public interface OnBackPressedListener {
void onBackPressed();
}
그리고 부모 Activity에서 위 인터페이스의 필드 + setter를 추가해주고
필드
private lateinit var onBackPressedListener: OnBackPressedListener
setter
public fun setOnBackPressedListener(onBackPressedListener: OnBackPressedListener) {
this.onBackPressedListener = onBackPressedListener
return
}
onBackPressed()
override fun onBackPressed() {
if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
binding.drawerLayout.closeDrawer(GravityCompat.START)
} else if (onBackPressedListener != null) {
onBackPressedListener.onBackPressed()
} else {
super.onBackPressed()
}
}
이런 식으로 onBackPressed()에 if else if else 조건문을 추가해줍니다.
저는 코틀린과 자바를 섞에서 Activity는 코드가 코틀린으로 되어 있습니다 ㅎㅎ
그리고 마지막으로 Fragment에서 아래처럼 코드를 추가해주면 됩니다.
assert getActivity() != null;
((MainActivity)getActivity()).setOnBackPressedListener(() -> {
if(binding.chartLayout.getVisibility() == View.VISIBLE) hideChart();
else getActivity().finish();
});
MainActivity 에는 본인의 부모 Activity 클래스 이름이 들어가면 됩니다.
직접해보시면 어렵지 않게 하실 수 있습니다.
이상입니다. 감사합니다.
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 setOnTouchListener 대신 xml 파일로 touch 효과 주기 (0) | 2019.01.24 |
---|---|
안드로이드 Camera2 api 로 동영상 촬영하고 갤러리에 저장하기. (7) | 2019.01.24 |
안드로이드 Fragment setOrientation landscape 프래그먼트 오리엔테이션 항상 가로 (0) | 2019.01.04 |
레트로핏 사용 시 JsonArray 받을 때 Expected a string but was BEGIN_ARRAY at line 1 column 2 path $ (0) | 2019.01.04 |
안드로이드 프로가드 적용 방법과 에러 발생 시 해결 방법 android studio apply proguard (0) | 2019.01.03 |