fragment,中文有分段、碎片的意思,可透过activity中,加入、切换多个不同的fragment,效果就类似於play商店画面切换的部分,为你推荐的按钮按下去显示的是A fragment的内容,而热门排行榜的按钮点下去显示的是B fragment的内容,中间那块就是类似於fragment的部分,而fragment也跟activity一样有它自己的生命周期,在每次状态改变时,就执行不同的状态流程,接着就先提提有关"生命周期"。
首先先看到Fragment的生命周期图
取自:Android Developers
其中比较常见的是onCreate及onCreateView,那麽就先讲onCreate。
首先onAttach在Fragment与Activity关联时已调用,而onCreate主要用於保存过去任何的状态,他会去接收一个bundle的savedInstancestate值,在开始进入这个活动周期时,会使用的方法来还原状态,而这个值在初次创建时为空值。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
onCreateView这个方法主要是可以透过使用LayoutInflater内的inflate方法,将你所设定的布局包装成一个view(视图)并使用,跟setContentView类似,而在fragment中因为是继承自fragment,而不是继承AppCompactActivity,所以没有setContentView方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ---Inflate the layout for this fragment---
return inflater.inflate(R.layout.fragment, container, false);
}
而onViewCreated则是在onCreateView之後触发的事件。
在建立完View之後,此状态代表Fragment、Activity已创建好,并且视图View的可见状态会保留、可使用Activity的资源。
@Override
public void onViewStateRestored(Bundle savedInstanceState){
super.onViewStateRestored(savedInstanceState);
}
Fragment完成创立後(Created),在原activity中使用FragmentManager+FragmentTransaction的方法来使其可见,若创立的view非空,就会把生命周期已到Started。
@Override
public void onStart() {
super.onStart();
}
当Fragment可见、效果皆已完成并且正在使用时,生命周期将移至Resumed调用onResume()方法,指示用户可以与Fragment进行交互的适当信号,像是View等,调用onResume()方法则完成交互。
@Override
public void onResume() {
super.onResume();
}
当用户离开Fragment但Fragment可见时,会将Fragment与View的生命周期移至Paused,并调用onPause()方法。
@Override
public void onPause() {
super.onPause();
}
当Fragment已停止,会向观察者发出onStop事件,状态转换可能由父Activity或Fragment停止触发,会在保存状态前调用的事件。
@Override
public void onStop() {
super.onStop();
}
当Fragment即将被结束、保存,就会执行onDestroyView这个方法,getViewLifecycleOwnerLiveData()将返回空值,他会删除onCreateView产生视图的所有引用。
@Override
public void onDestroyView() {
super.onDestroyView();
}
Fragment与Activity不再绑定,资源将被释放。
@Override
public void onDestroy() {
super.onDestroy();
}
接着就可以透过加入Logcat来将不同的状态执行观察,另外如果有需要了解Activity活动的生命周期,可以点选这篇文章,且可以做结合观察。
更多:Android Developers
<<: Alpine Linux Porting (一点九?)
Formik 介绍 在进行实作之前,先来认识一下 Formik 吧~ 如标题所说,Formik 是一...
今天我们来看一下 powershell 中的循环。在 powershell 有两种循环,一种 for...
为什麽你需要 Next.js ? 对於工程师来说选择用什麽样的技术,背後都是取决於商业策略需要什麽...
Screenshot 专案介绍 相信大家都有用过便利贴吧!在开会讨论时便利贴是一个很好用的工具,不同...
前言 对刚接触到 useState 的人来说, 应该要多点练习机会, 就跟学语言一样, 多用多练习就...