一、生命周期方法:
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); 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(); } });Fragment进行接收 并修改TextView的值
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() { return aaa; } public void setAaa(String aaa) { this.aaa = aaa; } private String aaa;设置一个字符串类型数据 并初始化 get set方法
在Activity里面 通过findFragmentById的方式来 绑定fragment
并且通过setAaa()方法进行传值
Fragment fragmentById = getFragmentManager().findFragmentById(R.id.fragmetn); MyFragment fragment= (MyFragment) fragmentById; fragment.setAaa("aaa静态传值");在Fragment里面进行 getAaa()方法接收数据
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); }