Android Fragment Lifecycle –多屏支持

片段生命周期是使用片段之前要考虑的重要方面。 每个想要在Android中开发应用程序的开发人员都必须面对手机碎片化问题或多屏尺寸支持

换句话说,市场上有许多智能手机具有不同的屏幕分辨率和不同的屏幕密度。 为了使情况更加复杂,如果可能的话,不仅有智能手机,而且还有平板电脑。 每个人都清楚,这两种设备类别在屏幕大小方面有很大的差异。 好吧,当我们开发应用程序时,我们必须牢记它可以在不同的设备上运行,并且必须对其进行优化,以便完全满足用户体验。 这带来了许多问题,因为我们必须调整应用程序,以使其在智能手机或平板电脑上运行时其行为有所不同。 到目前为止所说的被称为多屏支持 。 在上一篇文章( 如何在Android中支持 )中,我谈到了如何使用Android功能(如创建不同的布局等)来支持多屏。 这是一种仍可以使用的技术,但还不够。

一个经典的示例是一个具有项目列表的应用程序,当用户单击此列表中的项目时,该应用程序将显示项目详细信息。 好了,在这种情况下,如果应用程序在智能手机或平板电脑上运行,我们可能会有不同的行为。 在智能手机上,我们必须进行两项活动才能完成此任务。

Android_fragment_details

当用户点击某个项目时
Android_fragment_list


而在平板电脑的情况下,我们要“使用”所有设备屏幕以在项目列表附近显示详细信息。
Android_fragment-tablet

从上面的示例可以清楚地看出,我们希望有一种组合“活动”的方法,以便它们可以同时使用,也可以按一个调用另一个的顺序使用。 我们想要组织屏幕布局而不重写代码。 仅使用多种布局无法做到这一点,我们还需要其他一些东西。

分段

自从Android 3.0引入以来,一个名为Fragment的新“概念”就出现了。 片段是一段android代码,其布局可以安排并组合在一起以具有不同的布局。 使用片段,我们可以重复使用代码并同时满足设备屏幕尺寸要求。 一个片段不能自己生存,而只能在一个活动中,而这个片段可以容纳多个片段。 重要的是要注意,片段可以与其他活动元素组合在一起,这样就不必重写所有活动接口。 因此,使用片段,我们可以通过以下方式操纵主从应用程序(如上所示):

在智能手机上

当它在平板电脑上运行时,我们有:

片段生命周期

现在我们知道使用片段何时有用,我们需要知道它们是如何工作的。 片段仅存在于充当容器的活动中,每个片段都有自己的视图层次结构,可以像平常一样夸大其词。 片段生命周期比活动生命周期更为复杂,因为它具有更多状态。 这些生命周期状态如下所示:

让我们从上到下移动。 在片段生命的一开始, 便调用了onInflate方法。 我们必须注意,仅当使用标记< fragment >在布局中直接定义fragment时,才调用此方法。 在这种方法中,我们可以在XML布局文件中保存一些配置参数和一些属性。 在此步骤之后,将调用onAttach 。 一旦片段“附加”到“父亲”活动上,就会立即调用此方法,我们可以使用此方法存储有关活动的引用。 之后,我们有onCreate 。 这是最重要的步骤之一,我们的片段处于创建过程中。 此方法可用于启动某些线程以从远程服务器中检索数据信息。 onCreateView是片段必须创建其视图层次结构时调用的方法。 在此方法期间,我们将像在ListView小部件中那样,在片段内增加布局。 在此阶段,我们不能确定仍创建活动,因此无法依靠它进行某些操作。 在onActivityCreated中创建并准备好“父亲”活动时,我们会收到通知。 从现在开始,我们的活动处于活动状态并已创建,我们可以在需要时使用它。 下一步是onStart方法。 在这里我们做一些与onStart活动中的常见操作,在此阶段我们的片段是可见的,但仍未与用户交互。当该片段准备好与用户onResume交互时,就会调用该片段。 在此阶段结束时,我们的片段已启动并运行!!

然后可能发生活动被暂停,因此调用了活动的onPause的情况。 那么onPause片段方法也被称为。 之后,操作系统可能会决定破坏我们的片段视图,因此调用了onDestroyView 。 之后,如果系统决定解散我们的片段,则会调用onDestroy方法。 在这里,我们应该释放所有活动的连接,依此类推,因为我们的片段快死了。 即使是在销毁阶段,它仍会附加到父活动上。 最后一步是将片段与活动分离,并在调用onDetach时发生。

如何创建片段

一旦了解了片段的生命周期,我们仍然需要知道如何创建片段并将其附加到活动上。 我们需要知道的第一件事是,如果要创建片段,则必须扩展android.app.Fragment 。 因此,假设我们有一个名为Fragment1的片段 ,可以创建和定义它:

public class Fragment1 extends Fragment {
...
}

如前所述,片段仅存在于Activity中,因此需要以某种方式对其进行定义。 我们有两个选择:

  • 直接在XML布局文件中定义
  • 在XML布局文件中定义占位符,并直接在我们的Activity中动态动态管理片段

我们定义片段的方式会影响其生命周期,因为在第一种情况下, onInflate被调用,而在第二种情况下,生命周期从onAttach方法开始。

如果我们在XML中定义片段,

<fragment android:id="@+id/f1" 
              class="com.survivingwithandroid.fragment.Fragment1"
              android:layout_width="match_parent"
              android:layout_height="20dp"/>

如果我们使用占位符定义片段,则需要做其他一些工作。

布局框架集和片段

如果我们在XML布局文件中定义片段,则没有太多自由地动态修改片段。 我们可以使用另一种方法来获得更大的自由度:我们可以使用< FrameLayout >。 在XML布局文件中,我们有:

<FrameLayout android:id="@+id/fl1" 
             android:layout_width="match_parent"
             android:layout_height="200dp"/>

在活动方面,我们还需要更多的工作,因为我们必须自己实例化片段并将其“插入”到此FrameLayout中

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Fragment2 f2 = new Fragment2();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fl1, f2);
    ft.commit();
}

在下一篇文章中,我们将更多地讨论FragmentTransaction等。

翻译自: https://www.javacodegeeks.com/2013/06/android-fragment-lifecycle-multiple-screen-support.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值