我有一个活动,其中包含一个导航抽屉,当按下不同的导航项时,它会显示不同的碎片。问题是这些片段中的一个在加载时会有明显的延迟。
在我的活动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
onCreateView
在执行MainActivity
selectItem
之前无法执行{{1}}片段被交换,当用户按下导航项时会导致明显的延迟。
那么,是否可以初始化Fragment的视图以便没有明显的延迟?
答案 0 :(得分:0)
在单独的线程上创建片段不是一个好主意;您应该优化OnCreateView
。
答案 1 :(得分:0)
我还没有尝试过,但我想有可能只在onCreateView中膨胀一个容器,然后在后台线程中膨胀其他视图,并在它们完成膨胀后将它们添加到该容器中。
我现在面临同样的问题。