博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fragment的生命周期&同一Activity下不同Fragment之间的通信
阅读量:4676 次
发布时间:2019-06-09

本文共 3436 字,大约阅读时间需要 11 分钟。

(2)

Fragment的生命周期

和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方式来瞧一瞧Fragment的生命周期是什么样的:

1 publicclass Fragment1 extends Fragment {    2 publicstaticfinal String TAG = "Fragment1";    3 @Override  4 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    5         Log.d(TAG, "onCreateView");    6 return inflater.inflate(R.layout.fragment1, container, false);    7     }    8 @Override  9 publicvoid onAttach(Activity activity) {   10 super.onAttach(activity);   11         Log.d(TAG, "onAttach");   12     }   13 @Override 14 publicvoid onCreate(Bundle savedInstanceState) {   15 super.onCreate(savedInstanceState);   16         Log.d(TAG, "onCreate");   17     }   18 @Override 19 publicvoid onActivityCreated(Bundle savedInstanceState) {   20 super.onActivityCreated(savedInstanceState);   21         Log.d(TAG, "onActivityCreated");   22     }   23 @Override 24 publicvoid onStart() {   25 super.onStart();   26         Log.d(TAG, "onStart");   27     }   28 @Override 29 publicvoid onResume() {   30 super.onResume();   31         Log.d(TAG, "onResume");   32     }   33 @Override 34 publicvoid onPause() {   35 super.onPause();   36         Log.d(TAG, "onPause");   37     }   38 @Override 39 publicvoid onStop() {   40 super.onStop();   41         Log.d(TAG, "onStop");   42     }   43 @Override 44 publicvoid onDestroyView() {   45 super.onDestroyView();   46         Log.d(TAG, "onDestroyView");   47     }   48 @Override 49 publicvoid onDestroy() {   50 super.onDestroy();   51         Log.d(TAG, "onDestroy");   52     }   53 @Override 54 publicvoid onDetach() {   55 super.onDetach();   56         Log.d(TAG, "onDetach");   57     }   58 }

可以看到,上面的代码在每个生命周期的方法里都打印了日志,然后我们来运行一下程序,可以看到打印日志如下:

这时点击一下home键,打印日志如下:

如果你再重新进入进入程序,打印日志如下:

然后点击back键退出程序,打印日志如下:

看到这里,我相信大多数朋友已经非常明白了,因为这和Activity的生命周期太相似了。只是有几个Activity中没有的新方法,这里需要重点介绍一下:

  • onAttach方法:Fragment和Activity建立关联的时候调用。

  • onCreateView方法:为Fragment加载布局时调用。

  • onActivityCreated方法:当Activity中的onCreate方法执行完后调用。

  • onDestroyView方法:Fragment中的布局被移除时调用。

  • onDetach方法:Fragment和Activity解除关联的时候调用。

Fragment之间进行通信

通常情况下,Activity都会包含多个Fragment,这时多个Fragment之间如何进行通信就是个非常重要的问题了。我们通过一个例子来看一下,如何在一个Fragment中去访问另一个Fragment的视图。

还是在第一节代码的基础上修改,首先打开fragment2.xml,在这个布局里面添加一个按钮:

然后打开fragment1.xml,为TextView添加一个id:

接着打开Fragment2.java,添加onActivityCreated方法,并处理按钮的点击事件:

publicclass Fragment2 extends Fragment {   @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {   return inflater.inflate(R.layout.fragment2, container, false);       }   @Override publicvoid onActivityCreated(Bundle savedInstanceState) {   super.onActivityCreated(savedInstanceState);           Button button = (Button) getActivity().findViewById(R.id.button);           button.setOnClickListener(new OnClickListener() {   @Override publicvoid onClick(View v) {                   TextView textView = (TextView) getActivity().findViewById(R.id.fragment1_text);                   Toast.makeText(getActivity(), textView.getText(), Toast.LENGTH_LONG).show();               }           });       }   }

现在运行一下程序,并点击一下fragment2上的按钮,效果如下图所示:

我们可以看到,在fragment2中成功获取到了fragment1中的视图,并弹出Toast。这是怎么实现的呢?主要都是通过getActivity 这个方法实现的。getActivity方法可以让Fragment获取到关联的Activity,然后再调用Activity的 findViewById方法,就可以获取到和这个Activity关联的其它Fragment的视图了。

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/rainey-forrest/p/3782350.html

你可能感兴趣的文章
《数据结构》相关题目
查看>>
Codeforces Round #431 (Div. 2) A 水 B 暴力模拟 C 思维
查看>>
php-fpm 进程管理
查看>>
[linux-内核][转]内核日志及printk结构浅析
查看>>
SWMM[Storm Water Management Model]模型代码编译调试环境设置
查看>>
s11 day Linux 和nginx 部署
查看>>
程序猿的爱情-2012-01-22
查看>>
CentOS7.2 安装iptables
查看>>
网络是怎样连接的—1.浏览器生成消息
查看>>
codevs1430 素数判定
查看>>
2017年6月2号课堂笔记
查看>>
github
查看>>
poj1015【DP.......无奈了】
查看>>
C#性能优化的一些技巧
查看>>
PAT 甲级 1024 Palindromic Number
查看>>
信息安全经典书籍
查看>>
ios坐标位置转换
查看>>
Java多线程—JUC原子类
查看>>
C#中常用到的时间函数(天数差、星期几等)
查看>>
如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名
查看>>