안드로이드

안드로이드 fragment에서 onBackPressed() 메소드 추가하기, 뒤로가기버튼 기능 추가

알통몬_ 2019. 1. 7. 14:58
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


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 클래스 이름이 들어가면 됩니다.


직접해보시면 어렵지 않게 하실 수 있습니다.

이상입니다. 감사합니다.

반응형