안드로이드 개발 질문/답변
(글 수 45,052)
제가 지금 일정 시간이 지나고 자동으로 뷰가 전환되는 코드를 짜야 합니다.
현재 뷰 전환은 사용자 정의 ViewGroup에서 addView와 removeView를 사용하고 있습니다.
예를 들어 A라는 View(역시 사용자 정의)가 있고 B라는 View가 있다면
A라는 뷰 안에서 Timer를 돌려서 3초 후에 실행하도록 schedule을 등록했다면
3초 후에 ViewGroup에서 B View를 addView(B); 하고 다음 라인에서 removeViewAt(0); 을 합니다.
그런데 디버깅을 해보면
Timer에서 3초후에 ViewGroup에 들어가서 addView(B); 까지는 갑니다.
근데 저 addView를 실행하는 순간 Timer.class 파일로 가더니....
아무런 변화가 없습니다 -_-;
Timer.class에서 뭐 내용은 안보이니까...
라인만 한 20라인정도 실행하더니 다시 입력을 기다리는 실정입니다 -_-;;
대충 코드를 보자면
LogoView로 View를 확장해서 만든 클래스의 생성시 초기화 부분에 있는 타이머입니다.
생성되면 3초후에 ViewController의 changeView 메서드를 실행하게 되어 있습니다.
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
viewCtrl.changeView(viewCtrl.VIEW_MAIN);
}
}, 3000);changeView 메서드가 실행되면 받아온 인수 VIEW_MAIN에 의해 case문의 VIEW_MAIN 으로 가게 됩니다.
public void changeView(int nextView)
{
switch(nextView)
{
case VIEW_LOGO:
this.addView(vLogo);
this.removeViewAt(0);
break;
case VIEW_MAIN :
this.addView(vMain);
this.removeViewAt(0);
//vGame.startGame();
break;
case VIEW_GAME :
this.addView(vGame);
this.removeViewAt(0);
break;
case VIEW_GAMEOVER :
this.addView(vGameover);
this.removeViewAt(0);
break;
case VIEW_OTHER :
this.addView(vMain);
this.removeViewAt(0);
break;
}
//crossDissolve(this.getChildAt(0));
currentView = nextView;
Log.i("Agzac", "Click");
}여기서 addView로 vMain을 삽입하게 되는데 이 부분에서 addView가 실행되는 것 같으나
removeViewAt(0);이 실행되지 않음으로서 확실하게 확인할 방법을 잃었습니다;
addView(vMain)으로 진입한 후에 Timer.class가 탭으로 뜨면서 내부적으로 뭐가 실행되나 봅니다;
Step Over 하면 Timer.class의 라인 번호가 진행되다가 멈춤 (타이머는 죽은 듯 보입니다. 원래 1번만 실행하는 것이니..)
그러고 대기 상태가 되는 것 같습니다;
근데 중요한 것은 onTouch 로 이벤트를 받아서 changeView를 하면 잘된다는 것입니다.
뭔가 addView든, removeViewAt이든 Timer랑 물리면 정상작동하지 않는 것 같은데
혹시 뭔가 정보가 있으신가요? ㅠㅠㅠㅠㅠㅠㅠ
1.5 버전으로 제작중입니다 ㅠ
lifecluee@gmail.com




당연한겁니다.
Timer 안에서 실행하는것은 다른 thread 에서 view 를 touch 하신 건데..
이건 exception 이 뜨는 상황입니다.
intent 를 보내서 처리하시던지.. 등의 방법을 사용하셔야 합니다.