碎片是一种可以嵌入在活动中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,因此在平板中应用的很广泛.碎片(fragment)和活动很像,同样都能包含布局,同样都有自己的声明周期.
平板中的新闻标题列表界面和新闻详细内容界面分别放在两个碎片中,然后在同一个活动里引入这两个碎片,这样就可以将这个屏幕空间充分的利用起来了.
如果在模拟碎片看其UI时还是建议使用平板,因为手机可能现象不是很明显.需要我们创建一个平板模拟器.
碎片的简单应用
碎片在用法中和activity没有什么太大的区别,都是新建布局文件,给布局中的有关控件设置id,不同之处在于:fragment需要新建一个类而不是activity,如新建一个leftfragment类让它继承Fragment(注意在继承Fragment中选择的Fragment是support-v4库中的Fragment,因为这样可以让碎片在所有的Android系统版本中功能保持一致,否则程序很容易崩溃)
在新建的leftfragment类中需要我们重写onCreatView(LayoutInflater inflater)方法,在这个方法中通过LayoutInflater的inflater()方法将刚才定义的布局动态加载起来.
接下来修改要将填入frgment的相应的activity的布局文件,注意该布局文件中和普通activity中的布局文件基本一致,只是在某些方面存在不同,使用<fragment >标签在布局中添加碎片, <fragment/>标签中的android:name属性来显示指明要添加的碎片类名,注意一定要将类的包名也加上.
动态添加碎片
碎片的真正强大之处在于可以在程序运行过程中动态地添加到活动中.
动态添加碎片主要分为5步:
1.创建添加碎片的实例
2.获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到
3.开启一个事务,通过调用beginTransaction()方法开启
4.向容器中添加或替换碎片,一般采用replace()方法来实现,需要传入容器的id和待添加的碎片实例
5.提交事务,通过提交commit()方法来完成.
private void replaceFragment(Fragment fragment){ //首先获得FragmentManager FragmentManager fragmentManager=getSupportFragmentManager(); //通过beginTransaction()开始事务 FragmentTransaction transaction=fragmentManager.beginTransaction(); //向容器中添加或替换碎片 transaction.replace(R.id.right_layout,fragment); //模拟返回栈的效果,即按下Back键可以回到上一个碎片 transaction.addToBackStack(null); //提交事务 transaction.commit(); }
在碎片中模拟返回栈即按下back键可以返回上一个碎片可以使用FragmentTransaction提供的addToBackStack()方法,可以用于将事务添加到返回栈中.方法中的参数通常传入null即可
碎片和互动之间的通信
为了方便碎片和活动通信:
FragmentManager提供了一个类似于findViewById()的方法专门用于从布局文件中获取碎片的实例.
RightFragment rightFragment=(RightFragment) getFragmentManager() .findFragmentById(R.id.right_fragment);
调用FragmentManager的findViewById()方法,可以从活动中得到相应的碎片的实例,然后就能轻松的调用碎片里的方法了.
碎片中调用activity的方法,每个碎片都可以通过调用getActivity()方法来得到和当前碎片相关联的活动实例.
MainActivity activity=(MainActivity) getActivity()
有了活动实例之后,在碎片中调用活动里的方法便变得轻而易举了.当碎片中需要使用Context对象时,也可以使用getActivity()方法,因为获取到的活动本身就是一个Context对象.
碎片和碎片之间通信:首先一个碎片得到与它关联的活动,然后通过活动去获取另外一个碎片的实例,这样便实现了不同碎片之间的通信功能.
碎片的生命周期
碎片和活动内状态一样都是有运行状态,暂停状态,停止状态和销毁状态
其回调方法除了有跟activity一样的方法之外还有其独特的方法比如:
onAttach()。当碎片和活动建立关联的时候调用。
onCreateView()。为碎片创建视图(加载布局)时调用。
onActivityCreated()。确保与碎片相关联的活动一定已经创建完毕的时候调用。
onDestroyView()。当与碎片关联的视图被移除的时候调用。
onDetach()。当碎片和活动解除关联的时候调用。
碎片的生命周期动态加载布局的技巧
使用限定符
使用最小宽度限定符
网友评论