第四章 手机平板要兼顾一探究碎片 主讲:王海
第四章 手机平板要兼顾--探究碎片 主讲:王海
本章目标 能够熟练使用Fragmentz动态设计UI界面 能够熟练使用Menu和Toolbar组件 能够熟练使用AdapterView、ListView和GridView 掌握TabHost组件的使用 Android软件开发 主讲王海
Android软件开发 主讲:王海 本章目标 • 能够熟练使用Fragment动态设计UI界面 • 能够熟练使用Menu和Toolbar组件 • 能够熟练使用AdapterView、ListView和GridView • 掌握TabHost组件的使用
Fragment Android.从3.0开始引入Fragment(碎片) 允许将Activity拆分成多个完全独立封装的可重用的组件 每个组件拥有自己的生命周期和UI布局 为不同型号、尺寸、分辨率的设备提供统一的U设计方案 标题列表 FragmentA FragmentB 标题 标题A 标题1 详情 标愿3 标题B 标愿2 选中状态灰色 标题3 内容 内容 标题N 标愿N Activity A Activity B Android软件开发 主讲:王海
Android软件开发 主讲:王海 Fragment • Android从3.0开始引入Fragment(碎片) • 允许将Activity拆分成多个完全独立封装的可重用的组件 • 每个组件拥有自己的生命周期和UI布局 • 为不同型号、尺寸、分辨率的设备提供统一的UI设计方案 标题列表 标题A 标题B ··· 标题N 标题 内容 Activity A Activity B 详情 标题3 内容 标题1 标题2 标题3 ··· 标题N 选中状态灰色 FragmentA FragmentB
Fragment类及子类 Fragment DialogFragment ListFragment PreferenceFragment WebViewFragment 对话框界面的 实现列表界面的 选项设置界面的 WebView界面 Fragment Fragment Fragment 的Fragment Android软件开发 主讲:王海
Android软件开发 主讲:王海 Fragment类及子类 Fragment DialogFragment ListFragment PreferenceFragment WebViewFragment 对话框界面的 Fragment 实现列表界面的 Fragment 选项设置界面的 Fragment WebView界面 的Fragment
创建Fragment 通常在创建Fragment时,需要实现三个方法: ■onCreate0 ■ onCreateView() ■ onPause() ·将Fragment加载到Activity中主要有两种方式: ■把Fragment添加到Activity的布局文件中 ■ 在Activity的代码中动态添加Fragment Android软件开发 主讲:王海
Android软件开发 主讲:王海 创建Fragment • 通常在创建Fragment时,需要实现三个方法: onCreate() onCreateView() onPause() • 将Fragment加载到Activity中主要有两种方式: 把Fragment添加到Activity的布局文件中 在Activity的代码中动态添加Fragment
管理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"); } } ......省略 }