2010-07-29 4 views
0

ViewFlipper를 추가하면 UI 스레드가 완료 될 활동에서 onCreate() 메서드를 기다리는 것 같습니다. 그런 다음 두 번째보기를 표시합니다. 왜 그렇게됩니까?ViewFlipper - 처음보기를 강제로 표시하는 방법?

내 현재 코드는 다음과 같습니다

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_menu);  

    viewFlipper = (ViewFlipper) findViewById(R.id.ScreenSwitch); 
    viewFlipper.setInAnimation(AnimationUtils.makeInAnimation(this, true)); 
    viewFlipper.setOutAnimation(AnimationUtils.makeOutAnimation(this, true)); 

    //do the necessary loading, when the splash screen persists 
    doSomeLoading(); 

    viewFlipper.showNext(); 

} 

는 사실, doSomeLoading 루프 10 개 수백만 계산하고 아무것도하지 않고 대한 구성되어 있습니다. 이제 루프가 완료 될 때까지 대기하고 두 번째보기를 보여줍니다.

무의미한 것처럼 보이기 때문에 별도의 스레드를 만들지 않고도 솔루션을 고맙게 생각합니다. invalidate()는 도움이되지 않습니다.

답변

0

viewFlipper.showPrevious(); 일 가능성이 있습니까? 당신이 긴 로딩 또는 느린 작업을 수행 할 때
는, 대부분의 시간, 당신은 AsynTask 또는 배경 스레드를 생각할 수 :

편집

내가 여기에 전체 코드를하지 않지만는 생각이다.
그래서 새로운 내부 클래스를 만들어야합니다. AsyncLoader라고 할 수 있습니다. 이 클래스의 doInBackground() 메소드를 구현하고 doSomeLoading()을이 클래스에 넣습니다.
이제 onPostExecute()을 구현하고 viewFlipper.showNext();을 입력하십시오.
그런 다음 메서드에서 doSomeLoading()을 새 것으로 바꿉니다. AsyncLoader.execute();
이렇게 좋을 것입니다. 나는 실제 코드가 아니기 때문에 어떤 것을 잊어 버렸을 수도있다. 자세한 설명은 Check this을 참조하십시오.

+0

아니요, 여전히 doSomeLoading() 이후에 화면을 새로 고칩니다. 화면이 검은 색이됩니다. doSomeLoading() 내부입니다. 그런 다음 원하는보기가 나타납니다. – LordTwaroog

+0

UI 스레드 또는 백그라운드 스레드에서 루프를 실행하고 있습니까? UI 스레드에 있으면 검은 화면이 왜 생겼는지 설명 할 수 있기 때문입니다. 시스템은 다음 행을 실행하기 전에 doSomeLoading 코드를 완료합니다. – Sephy

+0

하지만 처음에는 첫 번째 견해를 갖고 싶습니다. 로드 후에는 두 번째 (viewFlipper.showNext())가 표시됩니다. 개념이 조금 바뀌었기 때문에 별도의 활동을 시작하기 만하면됩니다. 스레드가 시작되고로드 된 후 새 활동이 시작된 다음 스레드가 종료됩니다. 그러나 이것은 약간 추한 것 같습니다. 이 일을 좀 더 우아한 방법으로 찾으려고했습니다. – LordTwaroog

관련 문제