管理Fragment 通过FragmentManager3实现管理Fragment对象的管理 ·通过getFragmentManager(0获取FragmentManagerx对象 。 FragmentManager能够完成以下三方面的操作: 通过findFragmentById()或findFragmentByTag0方法,来获取Activity中 已存在的Fragment)对象 通过oopBackStack(0方法将Fragment从Activity的后退栈中弹出 ■ 通过addOnBackStackChangedListerner0方法来注册一个侦听器以监视后 退栈的变化 Android软件开发 主讲:王海
Android软件开发 主讲:王海 管理Fragment • 通过FragmentManager实现管理Fragment对象的管理 • 通过getFragmentManager()获取FragmentManager对象 • FragmentManager能够完成以下三方面的操作: 通过findFragmentById()或findFragmentByTag()方法,来获取Activity中 已存在的Fragment对象 通过popBackStack()方法将Fragment从Activity的后退栈中弹出 通过addOnBackStackChangedListerner()方法来注册一个侦听器以监视后 退栈的变化
管理Fragment FragmentManager fragmentManager=getFragmentManager(); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); FragmentTransaction被称作Fragment事务,与数据库事务类似,Fragment事 注意 务代表了Activity对Fragment执行的多个改变操作。 使用FragmentTransaction /创建一个新的Fragment对象 Fragment newFragment=new ExampleFragment () //通过FragmentManager获取Fragment事务对象 FragmentTransaction transaction=getFragmentManager().beginTransaction(); /通过replace(O方法把fragment_container替换成新的Fragment对象 transaction.replace(R.id.fragment_container,newFragment); //添加到回退栈 transaction.addToBackStack(null); //提交事务 transaction.commit ()
FragmentManager fragmentManager=getFragmentManager(); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); FragmentTransaction Fragment Fragment Activity Fragment • 使用FragmentTransaction //创建一个新的Fragment对象 Fragment newFragment=new ExampleFragment(); //通过FragmentManager获取Fragment事务对象 FragmentTransaction transaction=getFragmentManager().beginTransaction(); //通过replace()方法把fragment_container替换成新的Fragment对象 transaction.replace(R.id.fragment_container,newFragment); //添加到回退栈 transaction.addToBackStack(null); //提交事务 transaction.commit();
Fragment事务注意事项 程序的最后必须调用commit(0方法 ·程序中添加了多个Fragment>对象,显示的顺序跟添加顺序一致 当删除Fragment>对象时,在没有调用addToBackStack0方法情况下, Fragment>对象会被销毁 调用commit()后,事务并不会马上提交,而是会在Activity的UI线程中等待 注意 直到线程能执行的时候才执行。 Android软件开发 主讲:王海
Android软件开发 主讲:王海 Fragment • 程序的最后必须调用commit()方法 • 程序中添加了多个Fragment对象,显示的顺序跟添加顺序一致 • 当删除Fragment对象时,在没有调用addToBackStack()方法情况下, Fragment对象会被销毁 commit() Activity UI
与Activity通讯汛 Fragment获取其所在的Activity中的组件 View listview=getActivity().findviewById(R.id.list); Activity获取指定Frament:实例 ExampleFragment fragment (ExampleFragment)getFragmentManager() findFragmentById(R.id.example fragment) 在Fragment中定义回调接口 public static class FragmentA extends ListFragment ,…··.省略 //Activity必须实现下面的接口 public interface OnNewsSelectedListener{ //传递当前被选中的标题的id public void onNewsSelected(long id); } ·.省略 Android软件开发 主讲:王海
Android软件开发 主讲:王海 与Activity通讯 • Fragment获取其所在的Activity中的组件 View listView=getActivity().findViewById(R.id.list); • Activity获取指定Frament实例 ExampleFragment fragment = (ExampleFragment)getFragmentManager() .findFragmentById(R.id.example_fragment) • 在Fragment中定义回调接口 public static class FragmentA extends ListFragment { ......省略 //Activity必须实现下面的接口 public interface OnNewsSelectedListener{ //传递当前被选中的标题的id public void onNewsSelected(long id); } ......省略 }
与Activity通讯 使用onAttach()方法检查Activity是否实现回调接口 public static class FragmentA extends ListFragment OnNewsSelectedListener mListener; ..·.省略 @Override public void onAttach(Activityactivity){ super.onAttach(activity); try( mListener =(OnNewsSelectedListener)activity; }catch(ClassCastException e){ throw new classCastException(activity.tostring() +"必须继承接口OnNewsSelectedListener"): } } .省略 Android软件开发 主讲:王海
Android软件开发 主讲:王海 与Activity通讯 • 使用onAttach()方法检查Activity是否实现回调接口 public static class FragmentA extends ListFragment { OnNewsSelectedListener mListener; ......省略 @Override public void onAttach(Activity activity){ super.onAttach(activity); try{ mListener =(OnNewsSelectedListener)activity; }catch(ClassCastException e){ throw new ClassCastException(activity.toString() +"必须继承接口 OnNewsSelectedListener"); } } ......省略 }