2014-08-30 154 views
1

我有一個活動,其中包含一個導航抽屜,當按下不同的導航項時會顯示不同的片段。問題是這些碎片中的一個在加載時有明顯的延遲。Android - 在交換片段之前加載片段的視圖

在我的活動的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; 
    } 
} 

我的問題是SportFragment小號selectItem執行的onCreateView直到MainActivity沒有得到執行「和片段交換這會導致明顯的延遲時用戶按下導航項目。

那麼,是否有可能初始化片段的視圖,以便沒有明顯的延遲?

+1

你不應該在主UI線程上使用'Thread.sleep()'。您不應該在後臺線程上創建這些片段,而是嘗試改進錯誤的onCreateView()的onCreateView()(太多視圖?)。 – Luksprog 2014-08-30 04:38:52

回答

0

在單獨的線程上創建片段不是一個好主意;您應該優化OnCreateView

0

我還沒有嘗試過,但我想只能在onCreateView中膨脹一個容器,然後在後臺線程中充注其他視圖並在完成充氣後將它們添加到該容器中。

我現在面臨同樣的問題。