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启动完成后调用

4. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle saveInstanceState)

每次创建都会绘制Fragment的View组件时回调该方法

5. public void onStart()

启动Fragment

6. public void onResume()

恢复Fragment时会被回调,调用onStart()方法后面一定会调用onResume()方法

7. public void onPause()

暂停Fragment

8. public void onStop()

停止Fragment

9. public void onDestoryView()

销毁Fragment所包含的View组件时被调用

10. public void onDestory()

销毁Fragment时被调用

11. Public void onDetch()

Fragment在Activity中删除时被调用,并且这个方法只会被调用一次

--------------------------------------------------------------------

Fragment与Activity的通信

1. Fragment可调用getActivity()方法获取它所在的Activity

2. Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment

3. Activity-----àFragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法

4. Fragment---àActivity:需要在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现接口回调。这样Fragment可调用该回调方法将数据传递给Activity

--------------------------------------------------------------------Eg:

技术分享

&&通过Fragment与Activity的通信实现上述操作

1. 分析Layout,需要两个Layout

一个layout为一个LinearLayout[s1] 下包含<EditText> <Button>

一个为Layout为一个LinerLayout包含的<fragment>

2. 布局完成后书写MyFragment.java,并且继承Fragment

含有一个setContentView()的方法

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment2, container, false);

TextView tv = (TextView) view.findViewById(R.id.text);

String text=getArguments().get("name")+""[s2] ;

tv.setText(text);

return view;

3. 书写MyActivity.java,并且继承Activity

① 控件初始化等操作省略

② 增加Button的点击事件

send.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

String text = editext.getText().toString();

MyFragment5 fragment5 = new MyFragment5();[s3]

Bundle bundle = new Bundle();[s4]

bundle.putString("name", text);[s5]

fragment5.setArguments(bundle);[s6]

FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction beginTransaction = fragmentManager

.beginTransaction();[s7]

beginTransaction.add(R.id.layout, fragment5, "fragment5");[s8]

beginTransaction.commit();


[s1]含有Id

[s2]用于接受值

[s3]创建Fragment的对象

[s4]声明数据包

[s5]数据包中的数据赋值

[s6]将数据传递给Fragment

[s7]创建事务

[s8]向当前视图中添加View对象【布局 <<<ß------数据】

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。