碎片(Fragment)是一种可以嵌入在activity当中的UI片段,它能让程序更加合理和充分的利用大屏幕的空间,因此在平板上应用的很广泛。但是,随着手机应用越来越复杂化,碎片在一些手机应用中也越来越重要,比起单纯的activity来说它更加灵活,也更能适应复杂的UI界面,因此当前无论平板手机它的应用都发非常广泛。
今天,我想总结一些有关碎片(Fragment)的一些知识点,也只是一些简单基础的东西,以供以后的复习查阅。
首先,碎片(Fragment)有两种包来提供,分别是系统内置的android.app.Fragment和support-v4库中的android.support.v4.app.Fragment。系统内置的Fragment最低兼容到3.0版本,而support-v4下的Fragment可以兼容到1.6,因此v4下的版本兼容更多,使用更广。通过目前是用来看,一般都是推荐使用v4下的Fragment.
同时,这两种不同版本的碎片调用方法也不同,主要是在动态调用(也就是在activity中调用Fragment)的方法不同,android.app.Fragment使用 (ListFragment)getFragmentManager().findFragmentById(R.id.userList) 获得 ,继承Activity。android.support.v4.app.Fragment使用 (ListFragment)getSupportFragmentManager().findFragmentById(R.id.userList) 获得 ,需要继承android.support.v4.app.FragmentActivity。简单来说,主要是getFragmentManager()方法和getSupportFragmentManager()两个方法的区别。
在使用Fragment时,我们要重写Fragment的onCreateView()方法,然后在这个方法中通过LayoutInflate的inflate()方法将刚才定义的布局动态加载进来,最后,在活动中添加碎片时不要忘记通过android:name属性来显示指明要添加的碎片类名,同时要将包名也添加上。代码示例如下
public class NewsContentFragment extends Fragment { @Nullable private View view; public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.news_content_frag,container,false); return view; } }
android:name="com.example.lenovo.fragmentpracticeagain.NewsTitleFragment"
这里简单说明一下,LayoutInflater表示布局填充器或者加载器,将xml文件转换成view 对象。
viewGroup Container表示当前fragment插入activity的布局视图对象
Bundle savedInstanceState表示存储上一个fragment的信息
碎片的真正强大之处在于它可以在程序运行时动态的添加到活动中。这里我们使用一个具体的方法来说明。如下:
private void replaceFragment(Fragment fragment){ FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.right_layout,fragment); transaction.commit(); }首先我们给left_layout碎片中注册了一个点击事件,然后调用replaceFragment()方法动态添加了RightFragment这个碎片,当点击left_layout中的按钮时,就会调用replaceFragment()方法将右侧碎片替换。主要步骤是:
1、创建待添加的碎片实例
2、获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到
3、开启一个事务,通过调用beginTransaction()方法开启
4、向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例
5、提交事务,调用commit()方法来完成
好了,这就是碎片(fragment)的一些简单用法,也是基本用法,随着后面学习的深入,我还会继续总结更高级的碎片用法。