《Android第一行代码》first reading 七

碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用广泛。

Fragment生命周期.png
Fragment与Activity生命周期.png

fragment也含有4种状态:

运行状态:
  • 当一个碎片可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。
暂停状态:
  • 当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关的可见碎片进入停止状态。
停止状态:
  • 当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态
  • 通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,如果我们在事物提交之前调用了addToBackStack()方法,这时的碎片也会进入到停止状态。
    总的来说,碎片的停止状态和活动的差不多对用户不可见、可能被系统回收。
销毁状态
  • 当一个活动被销毁时,与它相关的碎片也进入销毁状态
  • 通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,如果我们在事物提交之前没有调用addToBackStack()方法,这时的碎片就会进入到销毁状态。

回调方法

碎片的回调大部分与活动的差不多,其中不同的是:
onAttach(): 当碎片和活动建立关联时调用。
onCreateView():为碎片创建视图时调用。
onActivityCreated():确保与碎片相关联的活动一定已经创建完毕的时候调用。
onDestroyView():当与碎片关联的视图被移除的时候调用。
onDetach():当碎片和活动解除关联的时候调用。

使用限定符

我们可以在res文件下新建一个layout文件夹,例:

限定符样式.png

这里我们使用的是最小宽度限定符,其他的限定符见图:

限定符.jpg

使用了限定符后,Android系统会根据你的手机的分辨率自动读取相应的限定符layout。

简单的使用碎片:

  1. 写一个Fragment
public class NewFragment extends Fragment{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.new_frag,container,false);        return view;
    }
}
  1. 写layout
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/new_fragment"
        android:name="soft.wc.com.fragmentbestpractice.fragment.NewFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

好了,我们使用了<fragment>标签在布局中添加碎片,其中需要注意的就是我们使用了name属性来显示指明要添加的碎片类名(一定要把类的包名加上)。

动态的添加碎片

碎片的强大之处在于,它可以在程序运行时动态地添加到活动中。
例:

NewFragment newFragment = new NewFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.news_content_layout,newFragment);
fragmentTransaction.commit();

动态添加碎片的步骤:

  1. 创建待添加的碎片实例;
  2. 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到;
  3. 开启一个事物,通过调用beginTransaction()方法开启;
  4. 向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容 器的id和待添加的碎片实例;
  5. 提交事物,调用commit()方法来完成。

Fragment可能会有两个不同包下的Fragment供你选择,一个是系统内置的android.app.Fragment,一个是support-v4库中android.support.v4.app.Fragment。这里建议使用support-v4库中的,因为它可以让碎片在所有Android系统版本中保持功能一致性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容