티스토리 뷰

 

 

이번에 Tab Layout을 구현하면서 Activity로부터 back key를 뺏어와야 할 일이 생겼다. 

그래서 fragment가 붙은 Activity의 back key call back을 뺏아서 fragment에서 받아먹을 수 있도록 구현했는데, 활용성이 높고, 확장성이 좋아보여서 정리해보려 한다. 

 

 


 

 

1. Back key를 뺏아올 Activity


/***** back key 받아먹기 리스너 등록 *****/
public interface onKeyBackPressedListener{
void onBackKey();
}

private onKeyBackPressedListener mOnKeyBackPressedListener;

public void setOnKeyBackPressedListener(onKeyBackPressedListener listener)
{
mOnKeyBackPressedListener = listener;
}

@Override
public void onBackPressed()
{
// 맨 처음에는 null이겠지만, 적용되는 fragment의 onAttach()(<-얘는 fragment가 view에 붙을때 호출되는 call back임) 호출 후에는 초기화가 되기 때문에 back key를 뺏아올 수 있다.
if (mOnKeyBackPressedListener != null)
{
mOnKeyBackPressedListener.onBackKey();
} else
{
super.onBackPressed();
}
}

-> 다음과 같이 onBackPressed() call back을 내맘대로 구현해서 해당 listener를 단 fragment의 onBackKey()를 call 하도록 하고있다. 

 

 

 


 

 

2. back key가 필요한 Fragment

 


@Override
public void onBackKey()
{
// back key 다시 원상복구 시켜놓기!
MainActivity activity = (MainActivity) getActivity();
activity.setOnKeyBackPressedListener(null);
activity.onBackPressed();
}

@Override
public void onAttach(Context context)
{
super.onAttach(context);
((MainActivity) context).setOnKeyBackPressedListener(this);
}

-> 해당 listener를 implement하고, onBackKey()에서 back key가 pressed되었을때 원하는 작업을 하면된다. 

여기서 주의깊게 봐야 할 부분은, onAttach()인데 얘는 'fragment가 parent layout에 붙을때' 호출된다. 

이 시점에 listener를 set하도록 했다. 

 

참고로 다시 back key를 원래대로 돌리고 싶다면, onBackKey()안에 있는 것처럼 listener set을 null로 바꾸고, onBackPressed()를 call하면 된다. 

 

 


 

 

이런 방법이 다만 back key를 뺏아오는 것에만 국한된게 아닐 거란걸 눈치챌 수 있다. 

다른 call back을 받아오는 모든 상황에 활용될 수 있으니, 필히 숙지하고 있도록 하자 !! :) 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함