再谈Fragment(二)
2016-05-26 16:07
169 查看
Fragment的生命周期
关键方法
onAttach()
onCreateView()
启动Fragment-->屏幕锁屏-->屏幕解锁-->切换到其他的Fragment
-->回到桌面-->回到应用-->退出Fragment
启动Fragment
onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()
屏幕锁屏
onPause()-->onStop()
屏幕解锁
onStart()-->onResume()
切换到其他Fragment
第一个:onPause()-->onStop()-->onDestroyView()-->onDestroy()-->onDetach()
第二个:onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()
Fragment与Activity通信
Fragment可调用getActivity()方法获取它所在的Activity
Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment
Activity-->Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法
Fragment-->Activity:需要在Fragment中定义一个内部回调接口,再让包含该Fragment的Acitivity实现该回调接口。这样Fragment可调用该回调方法将数据传递给Acitivity
main4.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送" />
</LinearLayout>
MyFragment5.java
public class MyFragment5 extends Fragment {
private String code = "Thank you, Activity!";
public MyListener listener;
public interface MyListener {
public void thank(String code);
}
@Override
public void onAttach(Activity activity) {
listener = (MyListener) activity;
super.onAttach(activity);
}
@Override
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 = (String) getArguments().get("name");
tv.setText(text);
Toast.makeText(getActivity(), "已成功接收到" + text, Toast.LENGTH_SHORT).show();
Toast.makeText(getActivity(), "向Activity发送" + code, Toast.LENGTH_SHORT).show();
listener.thank(code);
return view;
}
}
MainActivity4.java
public class MainActivity4 extends Activity implements MyListener {
private EditText editText;
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main4);
editText = (EditText) findViewById(R.id.editText);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = editText.getText().toString();
MyFragment5 fragment5 = new MyFragment5();
Bundle bundle = new Bundle();
bundle.putString("name", text);
fragment5.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction =
fragmentManager.beginTransaction();
beginTransaction.add(R.id.layout, fragment5, "fragment5");
beginTransaction.commit();
Toast.makeText(MainActivity4.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void thank(String code) {
Toast.makeText(MainActivity4.this, "已成功接收到" + code + ", 客气了",
Toast.LENGTH_SHORT).show();
}
}
关键方法
onAttach()
onCreateView()
启动Fragment-->屏幕锁屏-->屏幕解锁-->切换到其他的Fragment
-->回到桌面-->回到应用-->退出Fragment
启动Fragment
onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()
屏幕锁屏
onPause()-->onStop()
屏幕解锁
onStart()-->onResume()
切换到其他Fragment
第一个:onPause()-->onStop()-->onDestroyView()-->onDestroy()-->onDetach()
第二个:onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()
Fragment与Activity通信
Fragment可调用getActivity()方法获取它所在的Activity
Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment
Activity-->Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法
Fragment-->Activity:需要在Fragment中定义一个内部回调接口,再让包含该Fragment的Acitivity实现该回调接口。这样Fragment可调用该回调方法将数据传递给Acitivity
main4.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送" />
</LinearLayout>
MyFragment5.java
public class MyFragment5 extends Fragment {
private String code = "Thank you, Activity!";
public MyListener listener;
public interface MyListener {
public void thank(String code);
}
@Override
public void onAttach(Activity activity) {
listener = (MyListener) activity;
super.onAttach(activity);
}
@Override
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 = (String) getArguments().get("name");
tv.setText(text);
Toast.makeText(getActivity(), "已成功接收到" + text, Toast.LENGTH_SHORT).show();
Toast.makeText(getActivity(), "向Activity发送" + code, Toast.LENGTH_SHORT).show();
listener.thank(code);
return view;
}
}
MainActivity4.java
public class MainActivity4 extends Activity implements MyListener {
private EditText editText;
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main4);
editText = (EditText) findViewById(R.id.editText);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = editText.getText().toString();
MyFragment5 fragment5 = new MyFragment5();
Bundle bundle = new Bundle();
bundle.putString("name", text);
fragment5.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction =
fragmentManager.beginTransaction();
beginTransaction.add(R.id.layout, fragment5, "fragment5");
beginTransaction.commit();
Toast.makeText(MainActivity4.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void thank(String code) {
Toast.makeText(MainActivity4.this, "已成功接收到" + code + ", 客气了",
Toast.LENGTH_SHORT).show();
}
}
相关文章推荐
- KVM虚拟化搭建nginx负载均衡 和lamp 架构(三 nginx负载均衡)
- dom4j
- angularJs控制器执行顺序
- 解决android: SQLiteDatabaseLockedException: database is locked
- 【Zookeeper系列二】ZooKeeper典型应用场景实践
- 211. Add and Search Word - Data structure design
- js 使用总结
- UVA 11235Frequent values(RMQ)
- Centos系统备份与恢复教程
- SpringMVC学习之helloworld(一)
- 布隆过滤器(Bloom Filter)详解
- Struts2优点
- 《Android 之美 从0到1 -- 高手之路》
- 不使用广告而采集IDFA的app上架
- sourcetree POST git-receive-pack (chunked)解决方法
- 分布式缓存系统Memcached简介与实践
- 从.snk文件导出密钥
- Matlab中矩阵的平方和矩阵中每个元素的平方介绍
- 寻找小水王
- Intent实现页间面跳转