《Android第一行代码》first reading 七

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

《Android第一行代码》first reading 七_第1张图片
Fragment生命周期.png
《Android第一行代码》first reading 七_第2张图片
Fragment与Activity生命周期.png

fragment也含有4种状态:

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

回调方法

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

使用限定符

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

《Android第一行代码》first reading 七_第3张图片
限定符样式.png

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

《Android第一行代码》first reading 七_第4张图片
限定符.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

    

好了,我们使用了标签在布局中添加碎片,其中需要注意的就是我们使用了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系统版本中保持功能一致性。

你可能感兴趣的:(《Android第一行代码》first reading 七)