我有一個活動,其中包含一個導航抽屜,當按下不同的導航項時會顯示不同的片段。問題是這些碎片中的一個在加載時有明顯的延遲。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
沒有得到執行「和片段交換這會導致明顯的延遲時用戶按下導航項目。
那麼,是否有可能初始化片段的視圖,以便沒有明顯的延遲?
你不應該在主UI線程上使用'Thread.sleep()'。您不應該在後臺線程上創建這些片段,而是嘗試改進錯誤的onCreateView()的onCreateView()(太多視圖?)。 – Luksprog 2014-08-30 04:38:52