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

Android 如何在显示前预加载片段?,android,fragment,Android,Fragment,在我的活动中,我有几个全屏片段,每个片段从web下载一些数据(使用异步任务)并向用户显示。碎片一次显示一个 更具体地说,每个片段从sqlite数据库读取一些URL,并在列表中显示内容之前获取内容(如果有必要)。数据加载任务可以在OnCreate()函数中完成 我想在显示初始屏幕时预装所有片段(至少开始下载)。很像一个viewpager预加载它的片段 我想知道如何做到这一点?我尝试在我的活动的OnCreate()函数中初始化/创建所有片段,希望可以更早地调用片段的OnCreate(),但是在片段即

在我的活动中,我有几个全屏片段,每个片段从web下载一些数据(使用异步任务)并向用户显示。碎片一次显示一个

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

我想在显示初始屏幕时预装所有片段(至少开始下载)。很像一个viewpager预加载它的片段

我想知道如何做到这一点?我尝试在我的活动的OnCreate()函数中初始化/创建所有片段,希望可以更早地调用片段的OnCreate(),但是在片段即将显示给用户之前,不会调用片段的OnCreate()和OnCreateView()函数

片段的onActivityCreated(Bundle)告诉片段其活动已完成自己的活动。onCreate()

因此,解决此问题的方法是在
片段
活动创建(捆绑包)
中初始化或创建或执行要在片段创建之前预加载的内容


请参见

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

您可以开始加载的最早速度是在静态单例中或在将所有片段添加到容器中。因此,它们(及其视图)将被创建和初始化。(2) 隐藏那些没有使用的,只显示我想让用户看到的。(3) 使用FragmentTrasaction.show()/FragmentTrasaction.hide()操作可见性,而不是FragmentTrasaction.add()或FragmentTrasaction.replace()


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

我也面临同样的问题,然后我使用了这种方法,假设片段中有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);
}

这是真的,我想了想。我现在不这么做的原因是,我有几个片段连接到活动,每个片段都承载一些数据。如果我把所有的数据下载/更新任务都放在活动中,它最终会成为一个麻烦的活动,并且在我的托管活动和片段之间产生了非常强的耦合,这在某种程度上破坏了片段的用途。“快速”是,“高效”no@MartinKonecny,我知道你在说什么。但在我的应用程序中,用户会相当频繁地在所有片段之间切换。我不希望他们等待数据加载。你有更有效的方法来实现逻辑吗?你能详细说明第一步吗?“将所有碎片添加到容器中”是什么意思?谢谢