安卓动态管理Fragment深入分析:“这几个组件你知道吗?”

一、Fragment与Activity的关系

成都创新互联专注于桦甸企业网站建设,响应式网站建设,电子商务商城网站建设。桦甸网站建设公司,为桦甸等地区提供建站服务。全流程定制网站开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

要理解动态管理Fragment首先要理解一下Fragment与Activity的关系

Fragment可以理解为将Activity划分为若干个片段,Fragment是Activity的一部分,生命周期是依赖Activity的,是不能单独存在的。这样不难理解所有Fragment的管理(查找、添加、删除、替换)都应该在Fragment所依赖的Activity中进行,也就是Activity才是Fragment交互的场所,不要试图在一个Fragment中去管理另一个Fragment虽然也可以实现要求的功能但是不符合规范的。要完成对Fragment的具体操作需要使用FragmentManager组件。

二、使用FragmentManager组件

使用FragmentManager组件的关键代码如下:

 
 
 
 
  1. //1、创建FragmentManager组件
  2. FragmentManager fm=super.getSupportFragmentManager();
  3. //2、查询方法,获得Activity中某一个Fragment
  4. fm.findFragmentById(R.id.fooler)
  5. fm.findFragmentByTag(”tagName”)
  6. //3、动态添加Fragment
  7. fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
  8. //4、替换Fragment
  9. fm.beginTransaction().replace(R.id.OldFragment, newFragment).commit();
  10. //5、删除Fragment
  11. fm.beginTransaction().remove(R.id.myFragment).commit();
  12. //6、向Fragment传递数据
  13. f.setArguments(Bundle )方法传递数据

上述管理Fragment代码应组织在Fragment所属的Activity中去,下面就通过一个案例来看看具体实现.

三、实现案例

首先看一下本次的应用案例(如图所示),当单击底部***个区域和第二区域时实现中心区域的切换

界面分析:有三个区域 :头部区域TitleFragment,中心区域是一个FrameLayout布局通过代码动态加载ContentFragment,底部区域FloorFragment

1、Activity的布局如下

 
 
 
 
  1. RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent">
  4. android:layout_width="match_parent"
  5. android:layout_height="45dp"
  6. android:name="com.jereh.android.course.fragment.TitleFragment"
  7. />
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"
  10. android:layout_below="@id/fgTitle"
  11. />
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentBottom="true"
  15. android:orientation="horizontal"
  16. android:name="com.jereh.android.course.fragment.FloorFragment"
  17. />
  18. 复制代码
  19. 2、FloorFragment代码
  20. 复制代码
  21. public class FloorFragment extends Fragment implements OnClickListener {
  22. @Override
  23. public void onAttach(Activity activity) {
  24. super.onAttach(activity);
  25. }
  26. @Override
  27. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  28. Bundle savedInstanceState) {
  29. // TODO Auto-generated method stub
  30. View view=inflater.inflate(R.layout.floor_fragment, container,false);
  31. LinearLayout home=(LinearLayout)view.findViewById(R.id.home);
  32. LinearLayout list=(LinearLayout)view.findViewById(R.id.list);
  33. home.setOnClickListener(this);
  34. list.setOnClickListener(this);
  35. return view;
  36. }
  37. //定义接口,该接口在Activity中去实现,降低Activity与Fragment的耦合度
  38. public interface OnContentFragmentListener{
  39. void setContentFragment(String param);
  40. }
  41. private OnContentFragmentListener onContentFragmentListener;
  42. public void setOnContentFragmentListener(
  43. OnContentFragmentListener onContentFragmentListener) {
  44. this.onContentFragmentListener = onContentFragmentListener;
  45. }
  46. @Override
  47. public void onClick(View view) {
  48. // TODO Auto-generated method stub
  49. if(onContentFragmentListener!=null){
  50. switch(view.getId()){
  51. case R.id.home:
  52. //回调机制,调用实现类的方法
  53. onContentFragmentListener.setContentFragment("主面板Fragment");
  54. break;
  55. case R.id.list:
  56. onContentFragmentListener.setContentFragment("列表信息");
  57. break;
  58. }
  59. }
  60. }
  61. }
3、ContentFragment代码
 
 
 
 
  1. public class ContentFragment extends Fragment {
  2. private String title;
  3. public void setArguments(Bundle args) {
  4. title=args.getString("title");
  5. }
  6. @Override
  7. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  8. Bundle savedInstanceState) {
  9. View view=inflater.inflate(R.layout.content_fragment, container,false);
  10. if(title!=null)((TextView)view.findViewById(R.id.tvContent)).setText(title);
  11. return view;
  12. }
  13. }

4、DynaFragmentActivity代码

 
 
 
 
  1. public class DynaFragmentActivity extends FragmentActivity implements FloorFragment.OnContentFragmentListener {
  2. private ContentFragment contentFragment;
  3. private FloorFragment floor;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. super.setContentView(R.layout.dyna_fragment_activity);
  8. initFragment();
  9. }
  10. private void initFragment(){
  11. floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);
  12. floor.setOnContentFragmentListener(this);//注册侦听,传入实现类对象
  13. contentFragment=new ContentFragment();
  14. FragmentManager fm=super.getSupportFragmentManager();
  15. fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
  16. }
  17. public void setFragment(Fragment fragment){
  18. getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
  19. }
  20. @Override
  21. public void setContentFragment(String param) {
  22. // TODO Auto-generated method stub
  23. Bundle bundle=new Bundle();
  24. bundle.putString("title", param);
  25. contentFragment=new ContentFragment();
  26. contentFragment.setArguments(bundle);
  27. super.getSupportFragmentManager().beginTransaction()
  28. .replace(R.id.content, contentFragment).commit();
  29. }
  30. }

本文名称:安卓动态管理Fragment深入分析:“这几个组件你知道吗?”
标题路径:http://www.gawzjz.com/qtweb/news0/161400.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联