Android Fragment 初相识(二)

来源:互联网 发布:linux nfs配置 编辑:程序博客网 时间:2024/06/02 01:20

Android  Fragment 初相识(二) 

导读:
【1】Fragment 怎么兼容低版本(3.0)?(现在不常用)【2】Fragment 的生命周期
【3】实现 Fragment 之间的通信。
  小知识: 快速的修改应用的包名 。

【1】Fragment 怎么兼容低版本(3.0)?(现在不常用)

在实现低版本手机的Fragment的需求时,需要使用Android v4 支持包   (android-support-v4.jar) 
需要更改三个地方:
  [1]定义fragment继承V4包中的Fragment 
  [2]定义的activity要继承v4包中的FragmentActivity
  [3]通过这个方法getSupportFragmentManager  获取Fragment的管理者
 【1】更改继承的Fragment 的导入包,选择(android-support-v4.jar) 

 【2】更改Activity 的导入包

 【3】获取Fragment 的管理者的方式不一样,使用getSupportFragmentManager()

 【2】Fragment 的生命周期

Fragment 的生命周期 于 Activity 的生命周期相似,在Fragment 中最主要的重写的方法是 onCreateView()  和 onDestory() 方法
  1. package cn.edu.aynu.fangweixin;
  2. import android.app.Activity;
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import cn.edu.aynu.shengming.R;
  9. public class Fragment_friend extends Fragment {
  10. // 依附在Activity 上面
  11. @Override
  12. public void onAttach(Activity activity) {
  13. System.out.println("onAttach");
  14. super.onAttach(activity);
  15. }
  16. // 创建
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. System.out.println("onCreate");
  20. super.onCreate(savedInstanceState);
  21. }
  22. // Fragment 加载一个布局,显示Fragment 的内容
  23. @Override
  24. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  25. // [1]
  26. View v = inflater.inflate(R.layout.fragment_friend, null);
  27. System.out.println("onCreateView");
  28. return v;
  29. }
  30. // 在 onActivityCreated 中,view 完全初始化了
  31. @Override
  32. public void onActivityCreated(Bundle savedInstanceState) {
  33. System.out.println("onActivityCreated");
  34. super.onActivityCreated(savedInstanceState);
  35. }
  36. // 当页面可见。Activity 可见
  37. @Override
  38. public void onStart() {
  39. System.out.println("onStart");
  40. super.onStart();
  41. }
  42. // 获取焦点 (就是在布局上面有 按钮或者其它的点击事件,可以进行点击)
  43. @Override
  44. public void onResume() {
  45. System.out.println("onResume");
  46. super.onResume();
  47. }
  48. // 失去焦点
  49. @Override
  50. public void onPause() {
  51. System.out.println("onPause");
  52. super.onPause();
  53. }
  54. // 当界面不可见
  55. @Override
  56. public void onStop() {
  57. System.out.println("onStop");
  58. super.onStop();
  59. }
  60. // 与 onCreateView 对象,在onCreateView 初始化的方法在onDestoryView 就销毁掉了
  61. @Override
  62. public void onDestroyView() {
  63. System.out.println("onDestroyView");
  64. super.onDestroyView();
  65. }
  66. // 不可见
  67. @Override
  68. public void onDestroy() {
  69. System.out.println("onDestroy");
  70. super.onDestroy();
  71. }
  72. // 取消依附在Activity 上面
  73. @Override
  74. public void onDetach() {
  75. System.out.println("onDetach");
  76. super.onDetach();
  77. }
  78. }
【1】第一次开启界面打印Log。 先依附的Activity ,创建,创建view ,将view 在Activity 上加载完成,视图可见,获取焦点。

【2】按Home 键,失去焦点,界面不可见

【3】按返回键,退出应用。失去焦点,界面不可见,销毁onCreateView 生成的view ,销毁,取消在Activity 上的依附

 
    [1]使用Fragment必须重写onCreateView方法
    [2]还可以重写一个ondestroy方法 做一些收尾的工作 

【3】实现 Fragment 之间的通信(小案例:点击左边的按钮,改变右边的文字)。

Fragment有一个公共的桥梁 Activity。
关键代码:MainActivity.java
  1. //[1]获取一个Fragment 的管理者
  2. FragmentManager fragmentManager = this.getFragmentManager();
  3. //[2]开启事务
  4. FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
  5. //[3]使用了三个参数的方法,用于设置一个标签,来实现拿到 Fragment的实例对象
  6. FragmentTransaction replace1 = beginTransaction.replace(R.id.linear1, new Fragment01(), "f1");
  7. FragmentTransaction replace2 = beginTransaction.replace(R.id.linear2, new Fragment02(), "f2");
  8. //[4]提交事务
  9. beginTransaction.commit();
继承Fragment 的实现类  Fragment01.java 就是左边的Fragment ,有一个按钮
  1. package cn.edu.aynu.tongxin;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.ViewGroup;
  8. import android.widget.Toast;
  9. public class Fragment01 extends Fragment {
  10. @Override
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  12. // [1]使用inflater 来实现将布局文件 转化为 view
  13. View view = inflater.inflate(R.layout.fragment01, null);
  14. view.findViewById(R.id.button).setOnClickListener(new OnClickListener() {
  15. @Override
  16. public void onClick(View v) {
  17. // 实现对点击事件的监听
  18. Toast.makeText(getActivity(), "getActivity", 0).show();
  19. // [1]我们通过 getActivity 的方法返回我们的Fragment 的管理者,通过标签为“f2”来拿到我们的实现类 Fragment
  20. Fragment02 f2 = (Fragment02) getActivity().getFragmentManager().findFragmentByTag("f2"); // 调用实现的方法 改变文本内容
  21. f2.changeText("哈哈哈哈,我改变了");
  22. }
  23. });
  24. return view;
  25. }
  26. }

在Fragment 中打印Toast 

  1. Toast.makeText(getActivity(), "getActivity", 0).show();
Fragment中拿不到界面的Context,所以主要是通过 getActivity()中相当于拿到Context 对象。一般无法实现Toast 的方法的,就是拿不到Context 对象。
继承Fragment 的实现类  Fragment02.java 就是右边需要改变的文本内容
  1. package cn.edu.aynu.tongxin;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.TextView;
  8. import android.view.ViewGroup;
  9. public class Fragment02 extends Fragment {
  10. private TextView text;
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  13. // [1]使用inflater 来实现将布局文件 转化为 view
  14. View view = inflater.inflate(R.layout.fragment02, null);
  15. text = (TextView) view.findViewById(R.id.text);
  16. return view;
  17. }
  18. public void changeText(String content){
  19. text.setText(content);
  20. }
  21. }
效果:

 小知识: 快速的修改应用的包名 。
第一步:右键项目名->Android Tools->Rname Application Package

第二步:修改项目名称
 
第三步:Finish
 
 
 
1 0