안드로이드 개발 질문/답변
(글 수 45,052)
제가 하고자 하는 것은,
ViewFlipper 안에 두 뷰를 넣고, 외부 back 버튼을 누르면 플리퍼의 showPrevious() 를 호출하게 하는 것입니다 ㅠ ㅠ
헌데, key event 가 flipper 안까지 들어가지 않는 모양이에요.
nest 된 뷰에 setFocusableInTouchMode(true) 해줬구요.. 각 nest 뷰는 제가 커스텀 제작한 LinearLayout 입니당..
아래는 키 이벤트 처리 함수 부 이구요 ㅠ ㅠ
@Override
public boolean onKeyDown(int keycode, KeyEvent event)
{
if (keycode == KeyEvent.KEYCODE_BACK)
{
mFlipper.showPrevious();
return true;
}
return false;
}
flipper 를 보유하고 있는 view 에 key event 핸들러 걸어주면 되긴 합니다만, 제가 좀 특수한 상황이라,
flipper 가 보유한 view 에서 키 이벤트를 처리해야만 하는 상황이거든요...
해결 방안이 없을까요 ㅠ ㅠ (디버그 모드 돌려봤을때, if 문에 브레이크 포인트 걸어봤는데 onKeyDown 함수에 아예 들어가질 않더라구요..)
살려주세용...
2010.10.27 16:28:06
그 소스 부분을 지우시고... Create 바깥쪽에
public void onBackPressed() {
mFlipper.showPrevious();
}
이렇게 한번 넣어 보세요..
2010.10.27 20:15:56
네 바깥쪽에 넣으면 되긴 한데, flipper의 nested 뷰 내부에서 처리 되어야 하는 특수한 상황이었어요~ (그게 flipper 안에 또 flipper 가 들어가고, 그 두번째 flipper 안에 view 가 들어가 있거든요)
헌데 해결 했습니다. ^^;; 알고보니.. key event 가 flipper 의 부모뷰까지만 전달되고 더 안쪽으로는 전달이 안되더라구요;;
그래서 flipper 에는 keyDown 이벤트 함수 넣어두고 flipper 바깥 부모 뷰에서,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// 자식 뷰들에 Key 이벤트를 전달함.
for(int i = 0 ; i < this.tabView.getChildCount() ; ++i)
{
// Tab View 의 경우, Visible 한 child view 는 하나일 수 밖에 없으므로,
// 현재 Visible 상태인 view 에만 key 이벤트를 전달 한다.
View thisView = this.tabView.getChildAt(i);
if ( thisView.getVisibility() == View.VISIBLE )
return thisView.onKeyDown(keyCode, event);
}
return false;
}
요렇게 처리하면, nested 되어도 recursive 하게 모든 뷰에 이벤트가 전달 됩니다.
다른 분들 참고하셔요~~