如何在显示之前预先加载片段?

时间:2014-09-03 01:07:52

标签: android fragment

在我的活动中,我有几个全屏片段,每个片段都会从网上下载一些数据(使用异步任务)并将其显示给用户。片段一次显示一个。

更具体地说,每个片段从sqlite数据库中读取一些URL,并在列表中显示内容之前获取内容,如果这很重要的话。数据加载任务可以在OnCreate()函数中完成。

当我显示启动画面时,我想预加载所有片段(至少开始下载)。非常像一个viewpager预加载它的碎片。

我想知道如何实现这个目标?我尝试在我的活动的OnCreate()函数中初始化/创建所有片段,希望可以更早地调用片段的OnCreate(),但是片段的OnCreate()和OnCreateView()函数在片段之前不被调用。即将向用户展示。

5 个答案:

答案 0 :(得分:1)

听起来你需要从你的视图(片段)中分离你的模型(下载的数据)。一种方法是在您的活动中开始下载AsyncTasks,而不是在每个片段中启动它们。然后,当最终显示片段时,它们可以显示已下载的数据(或者微调器或其他指示下载过程仍在执行的情况)。

答案 1 :(得分:0)

  

片段的onActivityCreated(Bundle)告诉片段它的活动已经完成了自己的Activity.onCreate()。

因此,您解决此问题的方法是在Fragment onActivityCreated(Bundle) {{1}}

内创建片段之前初始化或创建或执行您要预加载的内容

请参阅documents for fragment's lifecyle

答案 2 :(得分:0)

您可以开始加载的最早速度是静态单例或Application Class

答案 3 :(得分:0)

我最终做的是以下内容:(1)将所有片段添加到容器中。因此,他们(和他们的观点)将被创建和初始化。 (2)隐藏那些未使用的,只显示我希望用户看到的那个。 (3)使用FragmentTrasaction.show()/ FragmentTrasaction.hide()来操作可见性,而不是FragmentTrasaction.add()或FragmentTrasaction.replace()。

如果您遵循此方法,请警告所有片段将缓存在内存中。但好处是片段之间的切换将是快速和有效的。

答案 4 :(得分:0)

我遇到了同样的问题然后我使用了这个方法,假设我们在片段中有一个EditText,那么我们可以使用这样的代码

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    //this method allows you to input or instantiate fragments before showing this to an activity conidering id is "editTextEditProfileFirstName"
    EditText firstName = (EditText) getActivity().findViewById(R.id.editTextEditProfileFirstName);

    firstName.setText("This is my first name", TextView.BufferType.EDITABLE);
    super.onViewCreated(view, savedInstanceState);
}