Fragment 에서는 H/W 백키 이벤트가 불릴 시
onBackPress() 함수가 실행되지 않는다. 즉, 오버라이딩 할 수 없는 기본 구조이다.
그럼, 어떻게 할 것 인가?
1. Fragment 에 onBackPressed() 라는 함수를 만든다.
필자는 백버튼 처리 함수를 만들고
하기 처럼 MainActivity.finish() 함수를 호출하여 앱을 종료하게 만들었습니다.
1
2
3
4
5
6
7
8
9
10
|
// 백버튼에 대한 처리를 한다.
@Override
public void onBackPressed() {
// 부모 Acitivity 얻어오기
Log.d("test", "### Fragment onBackPressed");
MainActivity activity = (MainActivity)getActivity();
activity.finish();
}
|
cs |
엥? 콜백 함수가 없는데... 어떻게 호출이 되느냐구요?
바로, 프래그먼트에 우리가 만든 인터페이스를 인플리먼트 해 주기 때문에 가능한 것 이죠.
2. Interface 만들기.
1
2
3
4
5
6
7
|
public class ResultFragment extends Fragment implements OnBackPressedListener{
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
|
cs |
인터페이스 내용은 하기 처럼, onBackPressed() 라는 함수의 선언 부만 적어줍니다.
OnBackPressedListener 인터페이스를 구현한 프래그먼트에선 당연히 onBackPressed() 를
오버 라이딩 해야되는 구조가 성립된 것입니다.
1
2
3
4
5
|
// 프로그래먼트 백 버튼을 만들기 위해서.
public interface OnBackPressedListener {
void onBackPressed();
}
|
cs |
3. MainActivity OnBackPressed() 함수 오버라이딩 하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 백 버튼 처리 하기.
@Override
public void onBackPressed() {
// super.onBackPressed();
// 원하는 프래그먼트를 불러온다. Fragment test = getSupportFragmentManager().findFragmentById(R.id.container);
if(test != null){
// 해당 프래그먼트의 백함수를 실행한다. ((OnBackPressedListener)test).onBackPressed();
}else{
finish();
}
}
|
cs |
그럼, 해당 프래그먼트를 품고 있는 부모 MainActivity 에서 OnBackPressed() 함수를 오버라이딩 합니다.
내용은 위와 같이
자신이 원하는 프래그먼트 내 OnBackPressed() 함수를 실행하는 구조 입니다.
OnBackPressedListener 인터페이스를 구현하고 있기에
((OnBackPressedListener)test).onBackPressed(); 구문이 가능하게 됩니다.
사실, 여러개의 Fragment 에서 각자 다르게 백 버튼 처리를 해주고 싶다면
위 코드를 유용하게 활용하면 되겠습니다.
감사합니다.
'앱 만들기 > 안드로이드 study' 카테고리의 다른 글
1인 개발자가 꼭 알아야할 안드로이드의 기술 #데이터 저장하기 (8) | 2020.09.15 |
---|---|
안드로이드의 기술 # 버튼 이벤트 처리. (4) | 2020.09.11 |
자바의 기술 # instanceof 사용방법. (2) | 2020.09.06 |
안드로이드의 기술 # android.content.res.Resources$NotFoundException: String resource ID # 에러 가 날때 (4) | 2020.09.04 |
안드로이드의 기술 # Handler 타이머 구현하기- 정지 기능 (10) | 2020.09.03 |
댓글