碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,与活动非常相似 。
动态添加碎片主要分为5步: 创建待添加的碎片实例。 获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。 开启一个事务,通过调用beginTransaction()方法开启。 向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。 提交事务,调用commit()方法来完成。
碎片和活动之间的通信: 虽然碎片都是嵌入在活动中显示的,可是实际上它们的关系并没有那么亲密。你可以看出,碎片和活动都是各自存在于一个独立的类当中的,它们之间并没有那么明显的方式来直接进行通信。那么该怎么样在活动中调用碎片里的方法,或者在碎片中调用活动里的方法呢? 为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,代码如下所示:
RightFragment rightFragment = (RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);调用FragmentManager的findFragmentById()方法,可以在活动中得到相应碎片的实例,然后就能轻松地调用碎片里的方法了。 掌握了如何在活动中调用碎片里的方法,那在碎片中又该怎样调用活动里的方法呢?其实这就更简单了,在每个碎片中都可以通过调用getActivity()方法来得到和当前碎片相关联的活动实例,代码如下所示:
MainActivity activity = (MainActivity) getActivity();有了活动实例之后,在碎片中调用活动里的方法就变得轻而易举了。另外当碎片中需要使用Context对象时,也可以使用getActivity()方法,因为获取到的活动本身就是一个Context对象了。
碎片与碎片之间的通信:首先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样也就实现了不同碎片之间的通信功能。
参考博客:https://www.cnblogs.com/guop/p/5072572.html