Fragment的生命周期&同一Activity下不同Fragment之间的通信

Android开发:碎片Fragment完全解析(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,在这个布局里面添加一个按钮:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:background="#ffff00">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="This is fragment 2"

android:textColor="#000000"

android:textSize="25sp"/>

<Button

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Get fragment1 text"

/>

</LinearLayout>

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

?





1

2

3

4

5

6

7

8

9

10

11

12

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#00ff00">

<TextView

android:id="@+id/fragment1_text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="This is fragment 1"

android:textColor="#000000"

android:textSize="25sp"/>

</LinearLayout>

接着打开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的视图了。

Fragment的生命周期&同一Activity下不同Fragment之间的通信,布布扣,bubuko.com

时间: 2024-10-13 17:46:17

Fragment的生命周期&同一Activity下不同Fragment之间的通信的相关文章

Fragment的生命周期和Activity之间的通信以及使用

Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragment,选择Blank,在Activity布局中直接加fragment,name属性直接指向之前建立的Fragment,这就添加上了Fragment,这种较为简单. 动态: 我们要做的是在Activity中添加一个Fragment,Fragment中有两个按钮,当按下按钮时分别切换不同的Fragmen

Android成长日记-Fragment的生命周期与Activity通信

1. public void onAttach(Activity activity) 当Fragment被添加到Activity时候会回调这个方法,并且这个方法只会被回调一次 2. public void onCreate(Bundle saveInstanceState) 创建Fragment的时候被回调,只会被调用一次 3. public void onActivityCreated(Bundle saveInstanceState) 当Fragment所在的Activity启动完成后调用

Fragment的生命周期

Fragment的生命周期有11个,比Activity的生命周期会复杂不少,而且Fragment的生命周期同Activity的生命周期的穿插的执行的,看图: 其中背景为蓝色的为Activity的生命周期,其他的为Fragment周期,由图可以看出,在Fragment初始化完成前,相同的生命周期都是Activity先执行的,而进入销毁的周期时,就变成了Fragment的先执行. 1.  public void onAttach(Activity activity)方法 执行完该方法,Fragmen

Activity和Fragment的生命周期

Activity和Fragment的生命周期

Fragment的总结:Fragment的生命周期及与Activity生命周期的对比

1.Fragment的生命周期: 先看Google帮助文档中给出的图示: //附加Fragment到当前Activity上. public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); } public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method st

Activity与Fragment的生命周期测试

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"                 xmlns:tools="http://schemas.android.com/tools"                 android:layout_width="match_parent"                 android:layout_hei

Fragment 整个生命周期演示

Fragment生命周期主要体现在以下表中13个方法里,以下是按照Fragment从开始到销毁的先后执行顺序排序. 序号 方法名称 描述 1 public void onInflate(Activity activity, AttributeSet attrs,BundlesavedInstanceState) 在Activity.onCreate方法之前调用,可以获取除了View之外的资源 2 public void onAttach(Activity activity) 当fragment第

【Android】11.4 Fragment及其生命周期

分类:C#.Android.VS2015: 创建日期:2016-02-22 一.简介 Android从3.0开始引入了fragment的概念,主要是为了支持在大屏幕上实现更为动态和灵活的UI设计,比如平板电脑等.由于平板电脑的屏幕要比手机屏幕大许多,这样就有更多的空间去组合和交换UI组件. 也许这样比喻你能更快地理解它:和WPF相比,如果将Activity的作用看作类似于WPF的Window或者Page:那么Fragments的作用就类似于WPF在Window或者Page中包含的一个或多个Fra

Fragment基础----生命周期

Fragment生命周期和Activity对比 注意:在一个app的运行期间,前台的activity有时可能会被其他的视图组件打断,然后进入pause状态. 比如打开一个半透膜的activity (比方一个dialog风格的activity),前一个activity就会进入pause.其实这个时候前一个activity是部分可见的,只是被后来的视图组建挡住了而 失去焦点,这种情况下,失去焦点的activity就处于pause状态. 但是,当一个activity被打断,并且完全不可见时(即使没被挡