2014-08-30 4 views
1

다른 탐색 항목을 누르면 다른 단편을 표시하는 탐색 서랍이 포함 된 활동이 있습니다. 문제는 이러한 조각 중 하나가로드 될 때 눈에 띄는 지연이 있음을 나타냅니다.안드로이드 - 조각을 교환하기 전에 조각보기로드

내 액티비티의 onCreate 메서드에서 각 조각을 미리로드하여 사용자가 탐색 항목을 누를 때 쉽게 교체 할 수 있도록 스레드를 시작합니다.

내 코드는 다음과 같이 보입니다 :

public class MainActivity extends Activity { 
    protected void OnCreate { 
     // Get instance of Thread InitialiseNavFrags. 
     InitialiseNavFrags fragmentInit = new InitialiseNavFrags(); 
     fragmentInit.start(); 
    } 
    private void selectItem(position) { 
     ... 
     final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     // Wait until sportsFragment is loaded. 
     while (sportsFragment == null) { 
      try { 
       Thread.sleep(300); 
      } catch (InterruptedException e) { 
       System.out.println("Caught InterruptedException :" + e); 
      } 
     } 
     // Switches fragments to FavouriteFragment 
     ft.replace(R.id.content_fragment, sportsFragment, "Sports"); 
     // Noticeable delay here 
     ft.commit(); 
    } 
    ... 
    class InitialiseNavFrags extends Thread { 
     public void run() { 
      favouriteFragment = new FavouriteFragment(); 
      sportsFragment = new SportFragment(); 
     } 
    } 
} 

public class SportsFragment extends Fragment { 
    public View onCreateView (...) { 
     // Task with noticeable delay 
     return view; 
    } 
} 

내 문제의 selectItem 실행 SportFragment '는 MainActivity 때까지의 onCreateView이 실행되지 않는다'이다과 조각이 눈에 띄는 지연이 때 발생하는 교환한다 사용자는 네비게이션 아이템을 누른다.

그럼, 눈에 띄는 지연이 없도록 Fragment의 뷰를 초기화 할 수 있습니까?

+1

메인 UI 스레드에서'Thread.sleep()'을 사용하지 마십시오. 이러한 조각을 백그라운드 스레드에 생성하지 말고, 대신에 onCreateView()의 onCreateView()를 향상 시키십시오 (너무 많은 뷰?). – Luksprog

답변

0

별도의 스레드에 조각을 만드는 것은 좋지 않습니다. 대신 OnCreateView을 최적화해야합니다.

0

나는 아직 시도하지 않았지만, onCreateView에서 컨테이너를 부 풀린 다음 배경 스레드에서 다른 뷰를 부 풀린 다음 팽창이 완료되면 해당 컨테이너에 추가 할 수 있다고 생각합니다.

나는 지금도 같은 문제에 직면 해있다.

관련 문제