Fragment
1、Fragment具有生命周期,而且受到它所在的宿主Activity的生命周期的影响。
2、Fragment必须委托在activity中运行。
3、Fragments可以接收它自己的事件
4、一个Fragment可以放在多个Activity中,一个Activity中也可以放置多个Fragments
Fragment生命周期
- 打开界面:onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume()
- 按下主屏幕:onPause() -> onStop()
- 重新打开界面:onStart() -> onResume()
- 按后退键:onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
- 可见 -> 不可见:onPause() -> onStop() -> onDestroyView()
- 不可见 -> 可见:onCreateView() -> onActivityCreated() -> onStart() -> onResume()
Fragment简单使用
Fragment1.class:
public class BlankFragment1 extends Fragment { private View root; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment if(root == null){ root = inflater.inflate(R.layout.fragment_blank_fragment1,container,false); } return root; } }
src.main.res.layout.acyivity_main.xml添加
<FrameLayout android:id="@+id/framelayout" android:name="com.example.administrator.project_fragment.BlankFragment1" android:layout_width="match_parent" android:layout_height="match_parent"/>
Fragment动态添加
1、创建一个待处理的fragment。
2、获取FragmentManager。一般都是通过getSupportFragmentManager()或者getFragmentManager()获取。
3、开启一个事务transaction,一般调用fragmentManager里的beginTransaction(
4、使用transaction进行fragment的替换
5、提交事务
private void changeFragment(Fragment fragment){ FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.framelayout,fragment); transaction.commit(); }
Activity与Fragment的通信
1、Bundle
Main.class
Bundle bundle = new Bundle(); bundle.putString("msg","hello world"); BlankFragment2 fragment2 = new BlankFragment2(); fragment2.setArguments(bundle);
Fragment1.class:
Bundle bundle = getArguments(); textView.setText(bundle.getString("msg"));
2、interface接口
Fragment1.class:
public interface OnFragmentListener{ void onReturn(String text); String getMsg(); }
if(listener!=null){ textview.setText(listener.getMsg()); }
Main.class
BlankFragment1 fragment3 = new BlankFragment1(new BlankFragment1.OnFragmentListener(){ @Override public void onReturn(String text) { } @Override public String getMsg() { return "this is BlankFragment1"; } } );