Android笔记(9)---Fragment的生命周期以及在Activity之间的传值
一、生命周期方法:
onAttach():当Fragment被添加到Activity里面就会执行这个方法 (只执行一次)
onCreate():当创建Fragment就会回调 (只调用一次)
onCreateView():每次创建都会绘制Fragment的View组件时,调用
onActivityCreate():当Fragment所在的Activity启动完成后,调用
onStart():启动Fragment,调用
onResume():恢复Fragment时会被回调,调用onStart()后面一定会调用这个方法
onPause():暂停Fragment
onStop():停止Fragment
onDestroyView():销毁Fragment里面的View组件时,调用
onDestroy():销毁Fragment时,调用
onDetach():Fragment从Activity中被删除了,调用(只调用一次)
(1)启动Fragment
onAttach()--->onCreate()--->onCreateView--->onActivityCreate()--->onStart()--->onResume()
(2)屏幕锁屏
onPause()--->onStop()
(3)屏幕解锁
onStart()--->onResume()
(4)切换到其他Fragment
第一个切换的Fragment:
onPause()--->onStop()--->onDestroyView()--->onDestroy--->onDetach()
第二个被切换过来的Fragment:
onAttach()--->onCreate()--->onCreateView--->onActivityCreate()--->onStart()--->onResume()
二、在Activity之间传值:
Activity---》Fragment 传值:
动态传值:
定义一个EditText 通过button 把在Activity上面输入的值传入到Fragment中来。
通过 setArguments(Bundle)方法来实现
send= (Button) findViewById(R.id.btnSi);Fragment进行接收 并修改TextView的值
editText= (EditText) findViewById(R.id.edit);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyFragment4 myFragment4=new MyFragment4();
Bundle bundle=new Bundle();
String aaa=editText.getText().toString();
bundle.putString("name",aaa);
myFragment4.setArguments(bundle);
FragmentTransaction add = getFragmentManager().beginTransaction().add(R.id.aa, myFragment4,"Nihao ");
add.commit();
// Toast.makeText(Main4.this,"已发送数据",Toast.LENGTH_SHORT).show();
}
});
getArguments().get(键值)来获取放在Bundle里面的值
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment4, container, false);
textView= (TextView) view.findViewById(R.id.textview4);
String a=getArguments().get("name").toString();
textView.setText(a);
静态传值:
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragmetn"
android:name="com.aa.zhao.fragmentdemo.MyFragment"/>
public String getAaa() {设置一个字符串类型数据 并初始化 get set方法
return aaa;
}
public void setAaa(String aaa) {
this.aaa = aaa;
}
private String aaa;
在Activity里面 通过findFragmentById的方式来 绑定fragment
并且通过setAaa()方法进行传值
Fragment fragmentById = getFragmentManager().findFragmentById(R.id.fragmetn);在Fragment里面进行 getAaa()方法接收数据
MyFragment fragment= (MyFragment) fragmentById;
fragment.setAaa("aaa静态传值");
btn.setOnClickListener(new View.OnClickListener() {这样就实现了静态传值效果。
@Override
public void onClick(View v) {
String a=getAaa();
System.out.println(a+"静态传值收到了");
}
});
Fragment---》Activity传值:
在Fragment里面 通过自定义一个接口 并写上一个方法 进行传值, 并且在onAttach方法里面 获取当前Activity。
public interface MyListener
{
void Thank(String code);
}
@Override
public void onAttach(Activity activity) {
listener= (MyListener) activity;
super.onAttach(activity);
}
获取当前Activity后 new一个 接口实例,并且调用方法 进行传值
listener.Thank("哎呦不错啊啊");
在Activity中 实现这个接口 并且复写里面的方法 接收传过来的数据
@Override
public void Thank(String code) {
System.out.println("收到您的回信"+code);
}
更多相关文章
- 有关WebView的一些使用方法
- Android 修改spinner 字体颜色 样式的方法
- Android 软键盘弹出时把原来布局顶上去的解决方法
- Android多窗口分屏(原生方法)
- getCacheDir()和getFilesDir()方法区别
- Object 开发中常用的重写方法总结toString,equals,hashCode,compare
- java 构造器内部的多态方法和行为
- Javassist生成class(生成类,方法,字段,注解)
- Eclipse创建的包变成文件夹的解决方法